REGEXP_COUNT スカラー関数

REGEXP_COUNT スカラー関数は、ストリング内で正規表現パターンが一致した回数のカウントを戻します。

パススルーのみの式: この関数はパススルーのみであり、実行できません。 Db2 for z/OS® 加速なし。 この関数の呼び出し方法については、「パススルー専用式によるクエリの高速化 」を参照してください。
構文図を読むビジュアルシンタックスダイアグラムをスキップするREGEXP_COUNT(ソース文字列 ,pattern-expression ,start ,flags ,CODEUNITS32,CODEUNITS16OCTETS )

スキーマは SYSIBM です。

ソース文字列
その中で検索が行われるストリングを指定する式。 この式は、組み込みの文字ストリング、グラフィック・ストリング、数値、ブール値、または日時値を戻す必要があります。 数値、ブール値、または日時値は、関数が評価される前に暗黙的に VARCHAR にキャストされます。 文字ストリングで FOR BIT DATA 属性を指定することはできません。
パターン表現
検索するパターンである正規表現ストリングを指定する式。 この式は、組み込みの文字ストリング、グラフィック・ストリング、数値、ブール値、または日時値を戻す必要があります。 数値、ブール値、または日時値は、関数が評価される前に暗黙的に VARCHAR にキャストされます。 文字ストリングで FOR BIT DATA 属性を指定することはできません。
開始
検索が開始される source-string 内の位置を指定する式。 式は、組み込みの文字ストリング、グラフィック・ストリング、ブール値、または数値を戻す必要があります。 INTEGER タイプでない値は、関数の評価の前に INTEGER に暗黙的にキャストされます。 整数の値は、1 以上でなければなりません。 OCTETS が指定され、ソース・ストリングがグラフィック・データの場合、整数の値は奇数でなければなりません。 デフォルトの開始値は 1 です。 開始位置に適用されるストリング単位については、CODEUNITS16、CODEUNITS32、または OCTETS のパラメーターの説明を参照してください。
パターン・マッチングのさまざまな面を制御するフラグを指定する式。 この式は、FOR BIT DATA 属性を指定しない組み込み文字ストリングを戻す必要があります。 ストリングには 1 つ以上の有効なフラグ値を含めることができ、フラグ値の組み合わせは有効でなければなりません。 空ストリングは、値 'c' と同じです。 デフォルトのフラグ値は 'c' です。
表 1. サポートされるフラグ値
フラグ値 説明
c マッチングで大/小文字を区別することを指定します。 このフラグは、'c' または 'i' が指定されていない場合のデフォルト値です。 この値は、値 'i' と一緒には指定できません。
i マッチングで大/小文字を区別しないことを指定します。 この値は、値 'c' と一緒には指定できません。
m 入力データに複数行含まれている可能性があることを指定します。 デフォルトでは、パターン内の「^」は入力ストリングの先頭のみと一致し、パターン内の「$」は入力ストリングの末尾のみと一致します。 このフラグを設定すると、「^」と「$」は、入力ストリング内の各行の先頭と末尾とも一致します。
n パターン内の「.」 文字が、入力ストリング内の行終了文字と一致することを指定します。 デフォルトでは、パターン内の「.」 文字は行終了文字と一致しません。 入力ストリング内の復帰と改行のペアは、単一行の終了文字として動作し、単一の「.」と一致します。 と一致します。
s パターン内の「.」 文字が、入力ストリング内の行終了文字と一致することを指定します。 この値は、値 'n' の同義語です。
x パターン内の空白文字を、エスケープされていない限り無視することを指定します。
CODEUNITS16、CODEUNITS32、または OCTETS
start 値のストリング単位を指定します。
  • CODEUNITS16 は、start 値を 16 ビットの UTF-16 コード単位で表すよう指定します。
  • CODEUNITS32 は、start 値を 32 ビットの UTF-32 コード単位で表すよう指定します。 これはデフォルトです。
  • OCTETS は、開始値がバイト単位で表現されることを指定します。

ストリング単位が CODEUNITS16 または OCTETS として指定され、ソース・ストリングのストリング単位が CODEUNITS32 である場合、エラーが戻されます。

詳細は、 文字列単位の仕様を参照してください。

関数の結果は、ソース・ストリング内のパターン式の出現回数を表す INTEGER です。 パターン式が検出されず、いずれの引数も NULL でない場合、結果は 0 です。

REGEXP_COUNT 関数の引数のいずれかが NULL になる可能性がある場合、結果も NULL になる可能性があります。 引数のいずれかが NULL の場合、その結果は NULL 値です。

  • 正規表現の処理は、International Components for Unicode (ICU) 正規表現インターフェースを使用して実行されます。
  • 非 Unicode データベースに関する考慮事項:
    • 正規表現パターンでは、半角の制御文字のみがサポートされます。パターン式引数には、文字ストリング・データ・タイプを使用してください。 ソース・ストリング引数でグラフィック・ストリング・データ・タイプを使用している場合でも、パターン式引数で文字ストリング・データ・タイプを使用できます。
    • パターン式引数がグラフィック・ストリング・データ・タイプの場合、ソース・ストリング引数はグラフィック・ストリング・データ・タイプでなければなりません。

詳細は、「正規表現制御文字 」を参照してください。

「Steven Jones and Stephen Smith are the best players」というストリングに「Steven」または「Stephen」が出現する回数をカウントします。
SELECT REGEXP_COUNT(
   'Steven Jones and Stephen Smith are the best players', 'Ste(v|ph)en') 
      FROM sysibm.sysdummy1
結果は、2 になります。