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]%';
これは、数字文字で始まらないユーザー名にマッチします。
その他の拡張機能