MariaDBでは、REGEXP_SUBSTR()
関数は、指定された正規表現パターンに一致する部分文字列を返します。
一致するものがない場合(つまり、入力文字列にサブ文字列が含まれていない場合)、結果は空の文字列になります。
構文
構文は次のようになります:
REGEXP_SUBSTR(subject,pattern)
subject
入力文字列であり、pattern
部分文字列の正規表現パターンです。
これを書いている時点では、MariaDBのバージョンのREGEXP_SUBSTR()
MySQLのREGEXP_SUBSTR()
よりも少ない引数を受け入れます 。 MySQLのバージョンでは、検索の開始位置、検索するオカレンス、および正規表現を絞り込む方法の引数を提供できます。
例
基本的な例は次のとおりです。
SELECT REGEXP_SUBSTR('Thailand and Laos', 'l.nd');
結果:
+--------------------------------------------+ | REGEXP_SUBSTR('Thailand and Laos', 'l.nd') | +--------------------------------------------+ | land | +--------------------------------------------+
この場合、一致があり、部分文字列が返されます。
複数の一致
デフォルトでは、文字列内に複数の一致がある場合、最初の一致が返されます:
SELECT REGEXP_SUBSTR('Lend for land', 'l.nd');
結果:
+----------------------------------------+ | REGEXP_SUBSTR('Lend for land', 'l.nd') | +----------------------------------------+ | Lend | +----------------------------------------+
一致なし
一致するものがない例を次に示します。
SELECT REGEXP_SUBSTR('Lend for land', '^C');
結果:
+--------------------------------------+ | REGEXP_SUBSTR('Lend for land', '^C') | +--------------------------------------+ | | +--------------------------------------+
一致するものがないため、結果は空の文字列になります。
大文字と小文字の区別
REGEXP_SUBSTR()
関数は、効果的な照合の大文字と小文字の区別の規則に従います。照合は、大文字と小文字を区別しない照合では大文字と小文字を区別せずに実行され、大文字と小文字を区別する照合とバイナリデータでは大文字と小文字を区別して実行されます。
次に例を示します:
SELECT
REGEXP_SUBSTR('My Cats', 'c.t') AS "My Default",
REGEXP_SUBSTR(_latin7'My Cats' COLLATE latin7_general_ci, 'c.t') AS "Case Insensitive",
REGEXP_SUBSTR(_latin7'My Cats' COLLATE latin7_general_cs, 'c.t') AS "Case Sensitive";
結果:
+------------+------------------+----------------+ | My Default | Case Insensitive | Case Sensitive | +------------+------------------+----------------+ | Cat | Cat | | +------------+------------------+----------------+
私のデフォルトの照合では大文字と小文字は区別されません。他の2つの文字列は、大文字と小文字を区別しない照合と大文字と小文字を区別する照合にそれぞれ強制されました。
BINARY
を提供する 文字列でも大文字と小文字が区別されます(以下を参照)。
バイナリ文字列
BINARY
を渡す 文字列は大文字と小文字の区別にも影響します。 BINARY
を使用 文字列の場合、大文字は小文字とは異なります:
例:
SELECT
REGEXP_SUBSTR('My Cats', 'c.t') AS "Character",
REGEXP_SUBSTR(BINARY 'My Cats', 'c.t') AS "Binary";
結果:
+-----------+--------+ | Character | Binary | +-----------+--------+ | Cat | | +-----------+--------+
大文字と小文字を変更すると、次のようになります。
SELECT
REGEXP_SUBSTR('My Cats', 'C.t') AS "Character",
REGEXP_SUBSTR(BINARY 'My Cats', 'C.t') AS "Binary";
結果:
+-----------+--------+ | Character | Binary | +-----------+--------+ | Cat | Cat | +-----------+--------+
ヌル引数
null
を渡す 引数を指定するとnull
になります。 :
SELECT
REGEXP_SUBSTR(null, 'c.t') AS "1",
REGEXP_SUBSTR('Cat', null) AS "2",
REGEXP_SUBSTR(null, null) AS "3";
結果:
+------+------+------+ | 1 | 2 | 3 | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
引数の数が間違っています
間違った数の引数を渡すか、引数を渡さないと、エラーが発生します:
SELECT REGEXP_SUBSTR('Cat');
結果:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'REGEXP_SUBSTR'