パターンマッチングで比較
LIKE句と同じくパターンマッチングを行うためにGLOB句が使用できます。次の書式を使います。
SELECT カラム名 , ... FROM テーブル名 WHERE カラム GLOB パターン;
LIKEク句との違いはパターンの指定方法です。GLOG句では次のようにパターンを指定します。
| 演算子 | 意味 |
|---|---|
| * | 任意の0文字以上の文字列 |
| ? | 任意の1文字 |
| [abc] | a or b or cのいずれかに一致 |
| [a-d] | aからdまでにいずれかに一致 |
'?'は任意の1文字にマッチします。
??? 3文字の任意の文字列 a??b aで始まりbで終わる4文字の文字列
'*'は0文字以上の任意の文字列にマッチします。
sql* sqlで始まる任意の長さの文字列 a*b aで始まりbで終わる任意の長さの文字列 a_*b aで始まりbで終わる3文字以上の任意の長さの文字列
'[abc]'は括弧内のいずれかの文字にマッチします。なお先頭に「^」を付けると括弧内のいずれの文字にも一致しない文字にマッチします。
[am]* aまたはmで始まる任意の長さの文字列 [^am]* aまたはm以外の文字で始まる任意の長さの文字列
'[a-d]'は括弧内の範囲の文字にマッチします。
[a-z]* aからzまでの文字で始まる任意の長さの文字列 [a-zA-Z0-9]* aからzまたはA-Zまたは0から9までの文字で始まる任意の長さの文字列
具体的には次のようになります。
create table goods(id integer, name text); select * from goods where name glob '???'; select * from goods where name glob '[0-9]*';
最初のSELECT文では「name」カラムの値が任意の3文字の場合にデータを取得します。2番目のSELECT文では「name」カラムの値が0から9までの数値で始まる任意の長さの値の場合にデータを取得します。
サンプル
では実際に試してみます。
次のようなデータが格納されたテーブルを対象にします。
それでは「hobbies」カラムの値の中に'Sports'が含まれるデータだけを取得してみます。
select * from friends where hobbies glob '*Sports*';
続いて先頭の文字が'O'から'U'までの文字で始まるデータだけを取得してみます。
select * from friends where hobbies glob '[O-U]*';
なおLIKEでは大文字と小文字を区別しませんが、GLOB句では大文字と小文字を区別します。
select * from friends where hobbies like '%d%';
select * from friends where hobbies glob '*d*';
LIKE句では「d」だけではなく「D」が含まれているデータにもマッチしますが、GLOB句では「d」が含まれているデータにはマッチしますが「D」が含まれているデータにはマッチしません。
( Written by T.buzz.Ikura+ )