SQLite like()
関数を使用すると、文字列を特定のパターンと比較できます。必要に応じてエスケープ文字を指定することもできます。
like()
を使用できます LIKE
の代替として機能します 演算子(Y LIKE X [ESCAPE Z]
を実行できるようにします 式)。
構文
次のいずれかを使用できます:
like(X,Y)
like(X,Y,Z)
-
X
パターンです -
Y
文字列です -
Z
オプションのエスケープ文字です
基本的な例
次の表を見てください:
CatId CatName ---------- ---------- 1 Brush 2 Flutter 3 100%Fluff 4 100$Fluff
次のコードを実行して、猫の名前が文字Fで始まるすべての行を返すことができます。
SELECT * FROM Cats
WHERE like('F%', CatName);
結果:
CatId CatName ---------- ---------- 3 Flutter
この例では、%
を使用しました 任意の数の文字(ゼロ文字を含む)が続く可能性があり、任意の文字である可能性があることを示すワイルドカード文字。
アンダースコア(_)文字
アンダースコア(_
)を使用する例を次に示します。 ) キャラクター。このワイルドカード文字は、1文字と完全に一致します。それ以上でもそれ以下でもありません。
SELECT * FROM Cats
WHERE like('Br_sh', CatName);
結果:
CatId CatName ---------- ---------- 1 Brush
前述のように、1つの文字にのみ一致します。そのため、私のデータに基づくと、次のことはできず、一致するものは期待できません。
SELECT * FROM Cats
WHERE like('Br_', CatName);
結果:
(結果がないため、これは意図的に空白になっています。)
エスケープ文字
必要に応じて文字をエスケープすることもできます。これを行うには、3番目のパラメーターとしてエスケープ文字を追加します(また、エスケープする文字の前にエスケープ文字を追加します)。
SELECT * FROM Cats
WHERE like('100\%F%', CatName, '\');
結果:
CatId CatName ---------- ---------- 3 100%Fluff
この場合、パーセント記号(%
)をエスケープしました )。名前に実際のパーセント記号が含まれている猫を探していたので、これを行いました。実際、この場合、私は非常に具体的な猫の名前を探していました– 100%Fで始まる猫の名前 。
それを回避していなかったとしたら、それはワイルドカードとして使用され、結果は異なっていたでしょう。
エスケープ文字を削除すると、次のようになります。
SELECT * FROM Cats
WHERE like('100%F%', CatName);
結果:
CatId CatName ---------- ---------- 3 100%Fluff 4 100$Fluff
ブール値を返す
like()
を使用できます 0を返す関数 または1 、一致するかどうかによって異なります。
これは、すべての行を返す必要がある場合に便利ですが、条件に一致するかどうかを示すフラグもあります。
これが例です。
SELECT
CatName,
like('F%', CatName)
FROM Cats;
結果:
CatName CatName LIKE 'F%' ---------- ------------------ Brush 0 Flutter 1 100%Fluff 0 100$Fluff 0
この場合、1つの行だけが基準に一致しましたが、それでも他のすべての行を表示する必要がありました。
大文字と小文字の区別
デフォルトでは、SQLite like()
関数はASCII文字では大文字と小文字を区別しません。これは、パターンで使用する大文字と小文字に関係なく、大文字と小文字に一致することを意味します。
case_sensitive_likeを使用できます ASCII範囲で大文字と小文字を区別する一致を実行するPRAGMAステートメント。
例については、SQLiteのLIKE演算子で大文字と小文字を区別する方法を参照してください。その記事はLIKE
のために書かれています 演算子ですが、like()
にも適用されます 機能。