に最終更新
パターンマッチング演算子
説明
パターンマッチング演算子は、文字列型のデータを比較するために使用します。
演算子の概要
| 演算子 | 機能 | 例 |
|---|---|---|
<char1> [NOT] LIKE <char2> | <char1> がパターン <char2> に一致する場合は TRUE になります(NOT を指定した場合は、一致しない場合に TRUE になります)。<char2> では、% は任意のゼロ文字以上の文字(空文字列を除く)に一致します。_ は任意の一文字に一致します。ワイルドカード文字の前にエスケープ文字がある場合、そのワイルドカード文字はリテラル文字として扱われます。 | SELECT 'ABCD' LIKE '%C_' |
<char1> [NOT] {REGEXP | RLIKE} <char2> | <char1> がパターン <char2> に一致する場合は TRUE になります(NOT を指定した場合は、一致しない場合に TRUE になります)。正規表現の具体的な規則については、後述の REGEXP セクションを参照してください。 | SELECT 'ABCD' REGEXP 'A.*D' |
LIKE
LIKE 条件は、パターンマッチングによる判定を指定します。等価比較演算子(=)は、ある文字列値と別の文字列値が完全に一致するかどうかを判定します。一方、LIKE 条件は、最初の値の中から後者の値で指定したパターンを検索し、文字列値の一部が一致するかどうかを判定します。
構文は次のとおりです。
<char1> [ NOT ] LIKE <char2> [ ESCAPE 'char_escape' ]
各要素の意味は次のとおりです。
char1は、検索対象の値となる文字列式(文字列カラムなど)です。char2は、パターンとなる文字列式で、通常は文字列リテラルです。char_escape(省略可能)は文字列式で、ASCII エンコーディングで長さが 1 文字である必要があります。エスケープ文字を指定するために使用します。char_escape を指定しない場合、デフォルトの ' \ ' がエスケープ文字になります。
どちらの文字列式(char1、char2)も、CHAR、VARCHAR、STRING のいずれかのデータ型を使用できます。データ型が異なる場合、Doris は両方を VARCHAR または STRING に変換します。
パターンには、次の特殊なパターンマッチング文字を含めることができます。
- パターン内のアンダースコア(
_)は、値の中のちょうど一文字に一致します。 - パターン内のパーセント記号(
%)は、値の中のゼロ文字以上に一致します。パターン%は NULL に一致しません。
例
select "%a" like "\%_";
結果は次のとおりです。"%" は特殊文字なので、正しく一致させるには "%" でエスケープする必要があります。
+-----------------+
| "%a" like "\%_" |
+-----------------+
| 1 |
+-----------------+
select "%a" like "a%_" ESCAPE "a";
前の例との違いは、"a" をエスケープ文字として指定している点です。
+----------------------------+
| "%a" like "a%_" ESCAPE "a" |
+----------------------------+
| 1 |
+----------------------------+
REGEXP (RLIKE)
REGEXP は LIKE 条件に似ていますが、LIKE の単純なパターンマッチングではなく、正規表現によるマッチングを行います。この条件では、文字によって定義される入力文字の集合を使用して文字列を評価します。
構文は次のとおりです。
<char1> [ NOT ] { REGEXP | RLIKE } <char2>
各要素の意味は次のとおりです。
char1は、検索対象の値となる文字列式(文字列カラムなど)です。char2は、パターンとなる文字列式で、通常は文字列リテラルです。
どちらの文字列式(char1、char2)も、CHAR、VARCHAR、STRING のいずれかのデータ型を使用できます。データ型が異なる場合、Doris は両方を VARCHAR または STRING に変換します。