SQLiteでは、LIKE
を使用できます パターンマッチングの比較を行うためのクエリの演算子。
たとえば、WHERE
に追加できます 指定されたパターンに一致する行のみを返すための句。
ただし、WHERE
に追加します LIKE
を使用できる方法は句だけではありません オペレーター。これを使用してブール値を返すこともできます。
基本的な例
LIKE
を使用する基本的な例を次に示します。 WHERE
の演算子 条項。
SELECT * FROM Artist
WHERE Name LIKE 'Black%';
結果:
ArtistId Name ---------- ------------------- 11 Black Label Society 12 Black Sabbath 169 Black Eyed Peas
この場合、名前が Blackで始まるすべてのアーティストを返したいと思いました。 。
パーセント記号は、0個以上の任意の文字(スペースを含む)に一致するワイルドカード文字です。
ワイルドカードなし
ワイルドカード文字を使用していなかったら、結果は得られなかったでしょう。
これが私の言いたいことの例です:
SELECT * FROM Artist
WHERE Name LIKE 'Black';
結果:
(結果がなかったため、意図的に空白にしています。)
複数のワイルドカード
必要に応じて、複数のワイルドカード文字を使用できます。この例では、パターンの前にもう1つ追加します。
SELECT * FROM Artist
WHERE Name LIKE '%Black%';
結果:
ArtistId Name ---------- ------------------- 11 Black Label Society 12 Black Sabbath 38 Banda Black Rio 137 The Black Crowes 169 Black Eyed Peas
これにより、黒の行が2つあるため、より多くの行が返されます。 彼らの名前ではありますが、最初はそうではありません。
アンダースコア(_)ワイルドカード
アンダースコア(_
)を使用するオプションもあります )ワイルドカード。
このワイルドカード文字は、1文字(任意の文字)と完全に一致します。
次の猫という表を考えてみましょう。 :
CatId CatName ---------- ---------- 1 Brush 2 Brash 3 Broosh 4 100%Fluff 5 100$Fluff
はい、それらの猫のいくつかは奇妙な名前を持っていますが、それらは便利です。
そのテーブルに対するクエリでアンダースコアワイルドカードを使用する例を次に示します。
SELECT * FROM Cats
WHERE CatName LIKE 'Br_sh';
結果:
CatId CatName ---------- ---------- 1 Brush 2 Brash
Brooshという名前の猫に注目してください 含まれていません。
Brooshを含めるには 、2つのアンダースコアを使用する必要があります:
SELECT * FROM Cats
WHERE CatName LIKE 'Br__sh';
結果:
CatId CatName ---------- ---------- 3 Broosh
ただし、これには他の2匹の猫は含まれません。
他の猫を含めるために、いつでもパーセント記号を使用できました。
SELECT * FROM Cats
WHERE CatName LIKE 'Br%sh';
結果:
CatId CatName ---------- ---------- 1 Brush 2 Brash 3 Broosh
ただし、これにより、 Brの間に2文字を超える名前も返されることに注意してください。 およびsh 。
ESCAPE条項
データに実際にワイルドカード文字が含まれている場合があります。つまり、データにはアンダースコアまたはパーセント記号が含まれています。
これは、アンダースコアまたはパーセント記号をワイルドカードではなくリテラル文字として実際に一致させようとしている場合に問題になる可能性があります。
私の猫の表では、1匹の猫の名前にパーセント記号が付いていることがわかります。別の猫の名前はほぼ同じですが、パーセント記号ではなくドル記号です。
もう一度表を示します:
CatId CatName ---------- ---------- 1 Brush 2 Brash 3 Broosh 4 100%Fluff 5 100$Fluff
名前が100%Fで始まる猫だけを返したい場合 次に、%をエスケープする必要があります 。これを回避しなかった場合、望ましくない結果が得られます。
なしでクエリを実行するとどうなりますか パーセント記号をエスケープします。
SELECT * FROM Cats
WHERE CatName LIKE '100%F';
結果:
CatId CatName ---------- ---------- 4 100%Fluff 5 100$Fluff
この場合、パーセント記号はワイルドカード文字として扱われていたため、パーセント記号もドル記号と一致していました。
パーセント記号がワイルドカード文字として扱われないようにするために、ESCAPE
を使用できます。 条項。
SELECT * FROM Cats
WHERE CatName LIKE '100\%%F' ESCAPE '\';
結果:
CatId CatName ---------- ---------- 4 100%Fluff
ブール値を返す
LIKE
を使用できます 0を返す演算子 または1 、一致するかどうかによって異なります。
これが例です。
SELECT
CatName,
CatName LIKE 'Br%'
FROM Cats;
結果:
CatName CatName LIKE 'Br%' ---------- ------------------ Brush 1 Brash 1 Broosh 1 100%Fluff 0 100$Fluff 0
この場合、最初の3行は基準に一致し、最後の2行は一致しません。
大文字と小文字の区別
デフォルトでは、SQLiteのLIKE
演算子はASCII文字では大文字と小文字を区別しません。これは、パターンで使用する大文字と小文字に関係なく、大文字と小文字に一致することを意味します。
case_sensitive_likeを使用できます ASCII範囲で大文字と小文字を区別する一致を実行するPRAGMAステートメント。
例については、SQLiteのLIKE演算子で大文字と小文字を区別する方法をご覧ください。
Like()関数
別の方法は、like()
を使用することです。 働き。
この関数は、LIKE
とまったく同じことを行います わずかに異なる構文を使用する必要があることを除いて、演算子。
上記の例はすべて、like()
を使用するように書き直すことができます。 必要に応じて機能します。