REGEXP_SUBSTR 関数 - Amazon Redshift

REGEXP_SUBSTR 関数

正規表現パターンを検索して文字列から抽出した文字を返します。REGEXP_SUBSTR は SUBSTRING 関数 関数に似ていますが、文字列で正規表現パターンを検索することができます。正規表現に関する詳細については、「POSIX 演算子」を参照してください。

構文

REGEXP_SUBSTR ( source_string, pattern [, position [, occurrence [, parameters ] ] ] )

引数

source_string

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

pattern

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

position

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

実行

このパターンのどの出現を使用するかを示す正の整数。REGEXP_SUBSTR は、最初の出現 - 1 一致をスキップします。デフォルトは 1 です。出現が 1 未満、またはソース文字列の文字数以上の場合、検索は無視され、結果は NULL となります。

パラメータ

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

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

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

  • e – 部分式を使用して部分文字列を抽出します。

    パターンに部分式が含まれる場合、REGEXP_SUBSTR は最初の部分式をパターンで使用して部分文字列を一致させます。REGEXP_SUBSTR は最初の部分式のみを考慮します。追加の部分式は無視されます。パターンに部分式がない場合、REGEXP_SUBSTR は「e」パラメータを無視します。

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

戻り型

VARCHAR

次の例では、メールアドレスの @ 文字とドメイン拡張の間の分が返されます。

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

次の例は、大文字と小文字を区別しない一致を使用して、文字列 FOX の最初の出現に対応する入力の部分を返します。

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

次の例では、PCRE 言語で記述されたパターンを使用して、少なくとも 1 つの数字と 1 つの小文字を含む単語を検索します。PCRE で特定の先読みの意味を持つ ?= 演算子を使用します。この例では、2 番目の単語に対応する入力部分を返します。

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

次の例では、PCRE 言語で記述されたパターンを使用して、少なくとも 1 つの数字と 1 つの小文字を含む単語を検索します。PCRE で特定の先読みの意味を持つ ?= 演算子を使用します。この例では、2 番目の単語に対応する入力部分を返しますが、大文字と小文字を区別しない一致結果を使用する点で前の例とは異なります。

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