パターン マッチングとテキスト抽出

完了

SQL Server 2025 では、新しい正規表現 (REGEXP) 関数が追加され、 SUBSTRING 関数が強化され、構造化テキストの操作が簡略化されます。 これらの追加により、開発者は、クライアント側のスクリプトや CLR 関数に依存することなく、柔軟なテキスト検索を実行したり、複雑なパターンを抽出したり、T-SQL でデータを直接クリーニングまたは変換したりできます。

パターン マッチングとテキスト抽出関数の概要

新しい REGEXP 関数ファミリでは、SQL Server 内で正規表現の評価を直接サポートしています。 各関数は、特定のパターンベースのテキスト操作を可能にします。

Note

REGEXP_LIKEREGEXP_MATCHES、および REGEXP_SPLIT_TO_TABLE には、データベース互換性レベル 170 が必要です。 スカラー関数 REGEXP_REPLACEREGEXP_SUBSTRREGEXP_INSTR、および REGEXP_COUNT は、すべての互換性レベルで使用できます。 2025 SQL Server互換性レベル 170 が既定でインストールされます。アップグレードされたデータベースにはALTER DATABASE [DatabaseName] SET COMPATIBILITY_LEVEL = 170;が必要な場合があります。

REGEXP_LIKE

文字列が正規表現パターンと一致するかどうかを確認します。 一致する場合は 1 を返し、それ以外の場合は 0 を返します。

REGEXP_SUBSTR

正規表現パターンに一致する最初の部分文字列を抽出します。 電話番号、日付、メール アドレスなどの特定の情報を引き出す場合に便利です。

REGEXP_REPLACE

パターンの文字列を検索し、パターンに一致するすべての出現箇所を置き換えます。 これは、データのクリーンアップと書式設定に使用できます。

REGEXP_INSTR

指定されたテキスト内のパターンに一致する最初の部分文字列の開始位置を返します。 構造化テキスト内のキー マーカーを検索するのに最適です。

REGEXP_COUNT

指定した文字列内の正規表現パターンの一致数をカウントします。 このカウントは、テキスト内の数字、単語、記号のカウントなど、パターンの頻度を測定する必要がある場合に便利です。

REGEXP_MATCHES

正規表現パターンに一致するすべての部分文字列をテーブルの結果として返します。 最初の一致だけでなく、1 つの文字列から複数のキャプチャが必要な場合に使用します。

REGEXP_SPLIT_TO_TABLE

正規表現の区切り記号を使用して、文字列を複数の行に分割します。

SUBSTRING の機能強化

SUBSTRING関数で、省略可能な長さパラメーターがサポートされるようになりました。 省略すると、指定した開始位置から文字列の末尾まで自動的に抽出されるため、LEN() の手動計算が不要になります。

これらの機能を組み合わせることで、簡潔で読みやすい T-SQL を使用して、SQL Server 2025 でテキスト パターンを直接検索、抽出、操作できます。


シナリオ例: 連絡先データの抽出とクリーニング

マーケティング チームは、顧客メッセージのデータベースを MessageText という名前の列に保持します。 多くのエントリには、さまざまな形式の電話番号が含まれています。 各メッセージから最初の電話番号を抽出し、標準形式に正規化し、無効な電話番号を含むメッセージを識別する必要があります。

サンプル データ

CustomerMessagesというテーブルに次のサンプル データがあるとします。

メッセージID メッセージテキスト
1 "(713) 555-1298 または Office 555-8811 に電話してください。
2 「私に連絡してください:+1-832-555-7821 ありがとう!
3 私の番号は713-555-9876内線33です。
4 電話がまだ登録されていません。

クエリ: 識別、抽出、標準化

-- Extract the first phone number pattern and format it consistently
SELECT MessageID,
       REGEXP_SUBSTR(MessageText, '\d{3}[)\-\s]*\d{3}[\-\s]*\d{4}') AS RawNumber,
       REGEXP_REPLACE(
           REGEXP_SUBSTR(MessageText, '\d{3}[)\-\s]*\d{3}[\-\s]*\d{4}'),
           '\D', ''
       ) AS DigitsOnly,
       CASE 
           WHEN REGEXP_LIKE(MessageText, '\d{3}[)\-\s]*\d{3}[\-\s]*\d{4}') = 1 THEN 'Valid'
           ELSE 'Missing'
       END AS PhoneStatus
FROM dbo.CustomerMessages;

結果

メッセージID RawNumber DigitsOnly PhoneStatus
1 (713) 555-1298 7135551298 有効
2 +1-832-555-7821 18325557821 有効
3 713-555-9876 7135559876 有効
4 NULL NULL 欠落

この例では、 REGEXP_SUBSTR を使用して最初の一致パターンを抽出し、 REGEXP_REPLACE を使用して数値以外の文字を削除し、有効な数値を確認 REGEXP_LIKE します。 このクエリでは、電話番号が T-SQL で直接一貫した数字のみの形式に標準化されます。


例 2: REGEXP_SPLIT_TO_TABLEと SUBSTRING を使用したデータの分割

別のテーブル CustomerFeedback、顧客の関心を説明するコンマ区切りのタグが格納されるとします。 それらを個別の行に分割し、クイック インデックス作成用の最初のキーワードを抽出する必要があります。

SELECT FeedbackID,
       value AS Tag,
       SUBSTRING(value, 1) AS FirstWord
FROM CustomerFeedback
CROSS APPLY REGEXP_SPLIT_TO_TABLE(Tags, '\s*,\s*');

このクエリでは、新しい SUBSTRING の動作 (長さを指定しない) を使用して開始位置から残りのテキスト全体を抽出しながら、コンマ区切りの各文字列を行に分割します。

結果

FeedbackID タグ FirstWord
1 旅行 旅行
1 写真術 写真術
2 ハイキング ハイキング
2 キャンピング キャンピング

概要

SQL Server 2025 の新しい REGEXP 関数と拡張 SUBSTRING 関数は、ネイティブパターンマッチングとテキスト抽出機能を提供します。 これらの追加により、外部の文字列処理が不要になり、データベース エンジン内のテキスト データのクリーニング、解析、分析が容易になります。 これらのツールを使用すると、開発者は ETL パイプラインを簡素化し、データ品質を向上させ、T-SQL で高度なテキストドリブン分析を直接有効にすることができます。