sql >> データベース >  >> RDS >> SQLite

LIKE演算子がSQLiteでどのように機能するか

    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()を使用するように書き直すことができます。 必要に応じて機能します。


    1. PostgreSQL論理レプリケーションの落とし穴

    2. chmodが失敗しました:AndroidのEPERM(操作は許可されていません)?

    3. SQLServer2008の分割機能

    4. MariaDB SESSION_USER()の説明