1. ホーム
  2. sql

[解決済み】Oracleで大文字小文字を区別しない検索を行う

2022-04-01 01:19:20

質問

のデフォルトの動作は LIKE といった比較演算子があります。 = などは大文字と小文字を区別します。

大文字と小文字を区別しないようにすることは可能ですか?

どのように解決するのですか?

10gR2 以降、Oracle では、文字列比較の動作を細かく設定するために NLS_COMP NLS_SORT セッションのパラメータを指定します。

SQL> SET HEADING OFF
SQL> SELECT *
  2  FROM NLS_SESSION_PARAMETERS
  3  WHERE PARAMETER IN ('NLS_COMP', 'NLS_SORT');

NLS_SORT
BINARY

NLS_COMP
BINARY


SQL>
SQL> SELECT CASE WHEN 'abc'='ABC' THEN 1 ELSE 0 END AS GOT_MATCH
  2  FROM DUAL;

         0

SQL>
SQL> ALTER SESSION SET NLS_COMP=LINGUISTIC;

Session altered.

SQL> ALTER SESSION SET NLS_SORT=BINARY_CI;

Session altered.

SQL>
SQL> SELECT *
  2  FROM NLS_SESSION_PARAMETERS
  3  WHERE PARAMETER IN ('NLS_COMP', 'NLS_SORT');

NLS_SORT
BINARY_CI

NLS_COMP
LINGUISTIC


SQL>
SQL> SELECT CASE WHEN 'abc'='ABC' THEN 1 ELSE 0 END AS GOT_MATCH
  2  FROM DUAL;

         1

また、大文字と小文字を区別しないインデックスを作成することも可能です。

create index
   nlsci1_gen_person
on
   MY_PERSON
   (NLSSORT
      (PERSON_LAST_NAME, 'NLS_SORT=BINARY_CI')
   )
;

この情報は、以下のサイトから引用しています。 Oracleの大文字・小文字を区別しない検索 . 記事には、次のようなことが書かれています。 REGEXP_LIKE が、古き良き時代のものを使っているようです。 = もあります。


10gR2より古いバージョンでは、実際に行うことができず、通常のアプローチでは、必要ない場合は アクセントインセンシティブ を検索することです。 UPPER() は、カラムと検索式の両方です。