デフォルトでは、SQLiteのLIKE
演算子はASCII文字では大文字と小文字を区別しません。これは、パターンで使用する大文字と小文字に関係なく、大文字と小文字に一致することを意味します。
ただし、大文字と小文字を区別するために使用できる手法があります。
SQLiteには、 case_sensitive_likeというプラグマステートメントがあります 、これは特にLIKE
を作成するように設計されています ASCII文字では大文字と小文字が区別されます。
「ASCII文字」を指定する理由は、LIKE
ASCII範囲を超えるUnicode文字の場合、演算子はデフォルトで大文字と小文字を区別します。
したがって、LIKE
が必要な場合 ASCII範囲で大文字と小文字を区別する演算子、 case_sensitive_like PRAGMAステートメントはあなたが探しているものかもしれません。
これはlike()
にも当てはまります LIKE
とまったく同じように機能する関数 オペレーター。
大文字と小文字の区別の有効化/無効化
次のブール値のいずれかを使用して、大文字と小文字を区別できるようにすることができます。
1
on
true
yes
次のブール値のいずれかを使用して、大文字と小文字を区別しないようにすることができます。
0
off
false
no
引数は括弧で囲むか、プラグマ名から等号で区切ることができます。
キーワード引数は、オプションで引用符で囲むことができます。
大文字と小文字を区別しない例
まず、 case_sensitive_likeを使用しない場合に何が起こるかを見てみましょう。 PRAGMAステートメント。
SELECT
'a' LIKE 'A',
'æ' LIKE 'Æ';
結果:
'a' LIKE 'A' 'æ' LIKE 'Æ' ------------ ------------ 1 0
この場合、最初の列では大文字と小文字が区別されません。大文字の A 小文字のaに一致します 。
そして、これがデータベーステーブルに対するクエリです。
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
結果:
CatName CatName LIKE 'br%' ---------- ------------------ Brush 1 Brash 1 Broosh 1 100%Fluff 0 100$Fluff 0
この場合、名前が Brで始まるすべての猫と一致します。 、基準で小文字の bを使用していても 。
大文字と小文字を区別する例
次に、 case_sensitive_likeを使用するとどうなるか見てみましょう。 ASCII範囲で大文字と小文字を区別できるようにするPRAGMAステートメント。
PRAGMA case_sensitive_like = 1;
SELECT
'a' LIKE 'A',
'æ' LIKE 'Æ';
結果:
'a' LIKE 'A' 'æ' LIKE 'Æ' ------------ ------------ 0 0
したがって、今回は大文字の A しない 小文字のaと一致します 。
大文字と小文字を区別できるようにした後のデータベースの例を次に示します。
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
結果:
CatName CatName LIKE 'br%' ---------- ------------------ Brush 0 Brash 0 Broosh 0 100%Fluff 0 100$Fluff 0
PRAGMAステートメントを再度実行する必要がないことに注意してください。接続を変更するまで、接続の設定はそのまま残ります。
大文字と小文字の区別を無効にする
大文字と小文字の区別を無効にしてクエリを再実行する例を次に示します。
PRAGMA case_sensitive_like = 0;
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
結果:
CatName CatName LIKE 'br%' ---------- ------------------ Brush 1 Brash 1 Broosh 1 100%Fluff 0 100$Fluff 0
Like()関数
前述のように、 case_sensitive_like PRAGMAステートメントはlike()
にも影響します 機能。
PRAGMA case_sensitive_like = 1;
SELECT
CatName,
like('Br%', CatName),
like('br%', CatName)
FROM Cats;
結果:
CatName like('Br%', CatName) like('br%', CatName) ---------- -------------------- -------------------- Brush 1 0 Brash 1 0 Broosh 1 0 100%Fluff 0 0 100$Fluff 0 0
Unicode対応のLIKE演算子
ユニコード対応のLIKE
が必要な場合は、SQLiteICU拡張機能を使用することもできます。 オペレーター。
LIKE
の実装 この拡張機能に含まれるものは、ICU関数u_foldCase()
を使用します 全範囲のUnicode文字の大文字と小文字を区別しない比較を提供します。