SQLite Glob 句

SQLite のGLOBGLOB 演算子は、ワイルドカードで指定されたパターンとテキスト値を照合するために使用されます。検索式がパターン式と一致する場合、GLOB 演算子は真(true)、つまり 1 を返します。LIKE 演算子とは異なり、GLOB は大文字と小文字を区別し、以下のワイルドカードについては UNIX の構文に従います。

  • *:0個、1個、または複数の数字または文字にマッチします。
  • ?:単一の数字または文字を表します。
  • [...]:角括弧内で指定された文字のいずれかにマッチします。例えば、[abc]「a」、「b」、「c」のいずれかの文字にマッチします。
  • [^...]:角括弧内で指定されていない文字のいずれかにマッチします。例えば、[^abc]「a」、「b」、「c」のいずれでもない文字にマッチします。

これらの記号は組み合わせて使用できます。

構文

*と?の基本構文は次のとおりです:

SELECT FROM table_name
WHERE column GLOB 'XXXX*'

or 

SELECT FROM table_name
WHERE column GLOB '*XXXX*'

or

SELECT FROM table_name
WHERE column GLOB 'XXXX?'

or

SELECT FROM table_name
WHERE column GLOB '?XXXX'

or

SELECT FROM table_name
WHERE column GLOB '?XXXX?'

or

SELECT FROM table_name
WHERE column GLOB '????'

AND または OR 演算子を使用して、N 個の条件を組み合わせることができます。ここでは、XXXX は任意の数値または文字列値を指定できます。

例

以下のいくつかの例は、'*' 演算子と '?' 演算子を使用した GLOB 句の違いを示しています:

ステートメント説明
WHERE SALARY GLOB '200*'200 で始まる任意の値を検索します。
WHERE SALARY GLOB '*200*'任意の位置に 200 を含む任意の値を検索します。
WHERE SALARY GLOB '?00*'2番目と3番目の桁が 00 である任意の値を検索します。
WHERE SALARY GLOB '2??'2 で始まり、長さが 3 文字の任意の値を検索します。例えば、「200」、「2A1」、「2B2」などの値にマッチする場合があります。
WHERE SALARY GLOB '*2'2 で終わる任意の値を検索します。
WHERE SALARY GLOB '?2*3'2番目の桁が 2 で、3 で終わる任意の値を検索します。
WHERE SALARY GLOB '2???3'長さが 5 桁で、2 で始まり 3 で終わる任意の値を検索します。

実際の例を挙げます。COMPANY テーブルに次のレコードがあると仮定します:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

以下は、COMPANY テーブル内の AGE が 2 で始まるすべてのレコードを表示する例です:

sqlite> SELECT * FROM COMPANY WHERE AGE  GLOB '2*';

これにより、次の結果が生成されます:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

以下は、COMPANY テーブル内の ADDRESS テキストにハイフン(-)を含むすべてのレコードを表示する例です:

sqlite> SELECT * FROM COMPANY WHERE ADDRESS  GLOB '*-*';

これにより、次の結果が生成されます:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
4           Mark        25          Rich-Mond   65000.0
6           Kim         22          South-Hall  45000.0

[...] ワイルドカード

[...]この式は、角括弧内で指定された文字セット内の任意の1文字にマッチするために使用されます。

例1:「A」または「B」で始まる製品名にマッチします。

SELECT * FROM products WHERE product_name LIKE '[AB]%';

これは、「A」または「B」で始まる製品名にマッチします。

例2:「1」、「2」または「3」で始まる電話番号にマッチします。

SELECT * FROM customers WHERE phone_number LIKE '[123]%';

これは、「1」、「2」または「3」で始まる電話番号にマッチします。

[^...] ワイルドカード

[^...]この式は、角括弧内で指定された文字セットに含まれない任意の文字にマッチするために使用されます。

例1:「X」または「Y」で始まらない製品コードにマッチします。

SELECT * FROM products WHERE product_code LIKE '[^XY]%';

これは、「X」または「Y」で始まらない製品

コードにマッチします。

例2:数字文字を含まないユーザー名にマッチします。

SELECT * FROM users WHERE username LIKE '[^0-9]%';

これは、数字文字で始まらないユーザー名にマッチします。

その他の拡張機能