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

SQLiteのLIKE演算子で大文字と小文字を区別する方法

    デフォルトでは、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文字の大文字と小文字を区別しない比較を提供します。


    1. SQLServerの固有の制約に関する洞察

    2. JOINによって別のテーブルから存在しないデータを見つける方法は?

    3. SQLServerの隠された機能

    4. openprojectのデータを失うことなくpostgresqlデータベースを10から12にアップグレードする方法