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

OracleでのLIKEを使用したアクセントと大文字と小文字を区別しない照合

    1つの方法は、セッションパラメータを変更することですNLS_SORT およびNLS_COMP

    SQL> SELECT Name FROM CollationTestTable WHERE NAME LIKE '%pe%';
    
    NAME
    --------------------------------------------------------------------------------
    pepe
    
    SQL> alter session set nls_sort=Latin_AI;
    
    Session altered
    
    SQL> alter session set nls_comp=linguistic;
    
    Session altered
    
    SQL> SELECT Name FROM CollationTestTable WHERE NAME LIKE '%pe%';
    
    NAME
    --------------------------------------------------------------------------------
    pepe
    pépé
    PEPE
    

    別のSOに示されているように、NLSSORTでLIKE演算子を使用することはできません。 (これは、NLSSORTがソートに使用されるバイトの文字列を返し、LIKEは文字列でのみ機能するためです)

    更新: NLSパラメータを設定することが私の最初の選択ですが、組み込み関数を使用して同じ結果を達成することもできます。いくつかの例:

    SQL> SELECT Name
      2    FROM CollationTestTable
      3   WHERE upper(convert(NAME, 'US7ASCII'))
      4         LIKE upper(convert('%pe%', 'US7ASCII'));
    
    NAME
    --------------------------------------------------------------------------------
    pepe
    pépé
    PEPE
    
    SQL> SELECT Name
      2    FROM CollationTestTable
      3   WHERE upper(translate(NAME, 'àâéèêìîòôùûÿ', 'aaeeeiioouuy'))
      4         LIKE upper(translate('%pe%', 'àâéèêìîòôùûÿ', 'aaeeeiioouuy'));
    
    NAME
    -----------------------------------
    pepe
    pépé
    PEPE
    



    1. Perlを使用してMySQLに接続する方法

    2. 構成システムの初期化に失敗しました

    3. MariaDBでのSUBTIME()のしくみ

    4. DAYOFYEAR()の例– MySQL