次の方法で共有


REGEXP_LIKE (Transact-SQL) プレビュー

適用対象: SQL Server 2025 (17.x) プレビュー Azure SQL DatabaseAzure SQL Managed InstanceSQL データベース

この記事で紹介しているテクノロジはプレビュー機能であり、「Microsoft Azure プレビューの追加利用規約」に従うことを条件として提供されます。

正規表現パターンが文字列内で一致するかどうかを示します。

REGEXP_LIKE 
     (
      string_expression,
      pattern_expression [, flags ]
     )

REGEXP_LIKE には、データベース互換性レベル 170 以上が必要です。 データベース互換性レベルが 170 より低い場合、 REGEXP_LIKE は使用できません。 その他の 正規表現スカラー関数 は、すべての互換性レベルで使用できます。

互換性レベルは、 sys.databases ビューまたはデータベース プロパティで確認できます。 データベースの互換性レベルは、次のコマンドを使用して変更できます。

ALTER DATABASE [DatabaseName] SET COMPATIBILITY_LEVEL = 170;

議論

string_expression

文字列の式。

文字列の定数、変数、または列を指定できます。

データ型: charncharvarchar、または nvarchar

REGEXP_LIKEREGEXP_COUNT、およびREGEXP_INSTR関数は、string_expression パラメーターに対して最大 2 MB の LOB 型 (varchar(max)nvarchar(max)) をサポートします。

pattern_expression

照合する正規表現パターン。 通常はテキスト リテラルです。

データ型: charncharvarchar、または nvarcharpattern_expression では、最大文字数 8,000 バイトがサポートされています。

flags

一致を検索するために使用する修飾子を指定する 1 つ以上の文字。 型は varchar または char で、最大 30 文字です。

たとえば、ims のようにします。 既定値は cです。 空の文字列 (' ') が指定されている場合は、既定値 ('c')として扱われます。 cまたはその他の文字式を指定します。 フラグに複数の矛盾する文字が含まれている場合、SQL Server は最後の文字を使用します。

たとえば、正規表現 ic 指定すると、大文字と小文字が区別される一致が返されます。

サポートされているフラグ値に記載されている文字以外の文字が 値に含まれている場合、クエリは次の例のようなエラーを返します。

Invalid flag provided. '<invalid character>' are not valid flags. Only {c,i,s,m} flags are valid.
サポートされているフラグ値
説明
i 大文字と小文字を区別しない (既定の false)
m 複数行モード: 開始/終了テキストに加えて、 ^$ 一致の開始/終了行 (既定の false)
s . \nと一致させる (既定のfalse)
c 大文字と小文字が区別されます (既定の true)

戻り値

ブール値を指定します。 true または false

注釈

関数のREGEXP_LIKEの精度を高めるために、ASSUME_FIXED_MIN_SELECTIVITY_FOR_REGEXPおよびASSUME_FIXED_MAX_SELECTIVITY_FOR_REGEXPクエリ ヒントを使用して、既定の選択度値を調整できます。 詳細については、 Query ヒントを参照してください。

これらのクエリ ヒントは、 カーディナリティ推定 (CE) フィードバックとも統合されています。 CE フィードバック モデルは、推定行数と実際の行数に大きな違いがある REGEXP_LIKE 関数を使用してクエリを自動的に識別します。 次に、クエリ レベルで適切な選択度ヒントを適用して、手動入力を必要とせずにプランの品質を向上させます。

このフィードバックベースの自動動作を無効にするには、トレース フラグ 16268 を有効にします。

例示

EMPLOYEES テーブルから、名が A で始まり、終わるすべてのレコードを選択します。Y

SELECT * FROM EMPLOYEES WHERE REGEXP_LIKE (FIRST_NAME, '^A.*Y$'); 

注文日が 2020 年 2 月である ORDERS テーブルからすべてのレコードを選択します。

SELECT * FROM ORDERS WHERE REGEXP_LIKE (ORDER_DATE, '2020-02-\d\d'); 

製品名に 3 つ以上の連続する母音が含まれる PRODUCTS テーブルからすべてのレコードを選択します

SELECT * FROM PRODUCTS WHERE REGEXP_LIKE (PRODUCT_NAME, '[AEIOU]{3,}'); 

CHECK列とEmail列のPhone_Number制約を持つ employees テーブルを作成します。

DROP TABLE IF EXISTS EMPLOYEES;

CREATE TABLE EMPLOYEES (  
    ID INT IDENTITY(101,1),  
    [Name] VARCHAR(150),  
    Email VARCHAR(320)  
    CHECK (REGEXP_LIKE(Email, '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$')),  
    Phone_Number NVARCHAR(20)  
    CHECK (REGEXP_LIKE (Phone_Number, '^(\d{3})-(\d{3})-(\d{4})$'))  
);