REGEXP_COUNT スカラー関数

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

Read syntax diagramSkip visual syntax diagramREGEXP_COUNT(source-string ,pattern-expression ,start ,flags ,CODEUNITS32,CODEUNITS16OCTETS )

スキーマは SYSIBM です。

ソース・ストリング
その中で検索が行われるストリングを指定する式。 この式は、組み込みの文字ストリング、グラフィック・ストリング、数値、 ブール値、 または日時値を返す必要があります。 数値、ブール値、 または日時値は、関数が評価される前に暗黙的に VARCHAR にキャストされます。 文字ストリングは、FOR BIT DATA 属性を指定できません (SQLSTATE 42815)。
パターン式
検索するパターンである正規表現ストリングを指定する式。 この式は、組み込みの文字ストリング、グラフィック・ストリング、数値、 ブール値、 または日時値を返す必要があります。 数値、ブール値、 または日時値は、関数が評価される前に暗黙的に VARCHAR にキャストされます。 CLOB または DBCLOB 式の長さは、VARCHAR または VARGRAPHIC データ・タイプの最大長を超えてはなりません。 文字ストリングは、FOR BIT DATA 属性を指定できません (SQLSTATE 42815)。
start
検索が開始される source-string 内の位置を指定する式。 この式は、組み込みの文字ストリング、グラフィック・ストリング、 ブール値、 または数値を戻す必要があります。 INTEGER タイプでない値は、関数の評価の前に INTEGER に暗黙的にキャストされます。 整数の値は、1 以上でなければなりません。 OCTETS が指定され、ソース・ストリングがグラフィック・データである場合、整数の値は奇数でなければなりません (SQLSTATE 428GC)。 デフォルトの開始値は 1 です。 開始位置に適用されるストリング単位については、CODEUNITS16、CODEUNITS32、または OCTETS のパラメーターの説明を参照してください。
フラグ
パターン・マッチングのさまざまな面を制御するフラグを指定する式。 この式は、FOR BIT DATA 属性を指定しない組み込み文字ストリングを返す必要があります (SQLSTATE 42815)。 1 つ以上の有効なフラグ値をストリングとして指定できますが、フラグ値の組み合わせが有効でなければなりません (SQLSTATE 2201T)。 空ストリングは、値 '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 である場合は、エラーが返されます (SQLSTATE 428GC)。

詳しくは、 文字ストリングの「組み込み関数のストリング単位」を参照してください。

結果

関数の結果は、ソース・ストリング内のパターン式の出現回数を表す 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 になります。