REGEXP_COUNT 関数 - Amazon Redshift

REGEXP_COUNT 関数

文字列で正規表現パターンを検索し、このパターンが文字列内に出現する回数を示す整数を返します。一致がない場合、この関数は 0 を返します。正規表現に関する詳細については、「POSIX 演算子」を参照してください。

構文

REGEXP_COUNT ( source_string, pattern [, position [, parameters ] ] )

引数

source_string

検索する文字列式 (列名など)。

pattern

SQL の標準の正規表現パターンを表す文字列リテラル。

position

検索を開始する source_string 内の位置を示す正の整数。position はバイト数ではなく文字数に基づくため、マルチバイト文字は 1 文字としてカウントされます。デフォルトは 1 です。position が 1 より小さい場合、source_string の最初の文字から検索が開始されます。positionsource_string の文字数より大きい場合、結果は 0 になります。

パラメータ

関数がパターンと一致するかを示す 1 つ以上のリテラル文字列。取り得る値には以下のものがあります。

  • c – 大文字と小文字を区別する一致を実行します。デフォルトでは大文字と小文字を区別するマッチングを使用します。

  • i – 大文字と小文字を区別しない一致を実行します。

  • p – Perl 互換正規表現 (PCRE) 言語でパターンを解釈します。

戻り型

整数

次の例は、3 文字のシーケンスが出現する回数をカウントします。

SELECT regexp_count('abcdefghijklmnopqrstuvwxyz', '[a-z]{3}'); regexp_count -------------- 8

次の例は、最上位ドメイン名が org または edu である回数をカウントします。

SELECT email, regexp_count(email,'@[^.]*\\.(org|edu)')FROM users ORDER BY userid LIMIT 4; email | regexp_count -----------------------------------------------+-------------- Etiam.laoreet.libero@sodalesMaurisblandit.edu | 1 Suspendisse.tristique@nonnisiAenean.edu | 1 amet.faucibus.ut@condimentumegetvolutpat.ca | 0 sed@lacusUtnec.ca | 0

次の例では、大文字と小文字を区別しない一致を使用して、文字列 FOX の出現をカウントします。

SELECT regexp_count('the fox', 'FOX', 1, 'i'); regexp_count -------------- 1

次の例では、PCRE 言語で記述されたパターンを使用して、少なくとも 1 つの数字と 1 つの小文字を含む単語を検索します。PCRE で特定の先読みの意味を持つ ?= 演算子を使用します。この例では、大文字と小文字を区別して、このような単語の出現回数をカウントします。

SELECT regexp_count('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 'p'); regexp_count -------------- 2

次の例では、PCRE 言語で記述されたパターンを使用して、少なくとも 1 つの数字と 1 つの小文字を含む単語を検索します。これは、PCRE で特定の意味を持つ ?= 演算子を使用します。この例では、このような単語の出現回数をカウントしますが、大文字と小文字を区別しない一致結果を使用する点で前の例とは異なります。

SELECT regexp_count('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 'ip'); regexp_count -------------- 3