Oracle データベースで大文字と小文字を区別しない検索を実行します
Oracle データベースの比較演算子 (LIKE、= など) は、デフォルトで大文字と小文字が区別されます。これは、大文字と小文字を区別せずにデータを検索する必要がある場合に課題となる可能性があります。この問題を解決するために、Oracle では、全文索引に依存せずに大文字と小文字を区別しない検索を実行する方法をいくつか提供しています。
方法 1: 大文字と小文字の変換
UPPER() 関数または LOWER() 関数を使用して、すべてのデータを強制的に同じ大文字と小文字にすることができます。例:
<code class="language-sql">select * from my_table where upper(column_1) = upper('my_string');</code>
または
<code class="language-sql">select * from my_table where lower(column_1) = lower('my_string');</code>
column_1
が upper(column_1)
または lower(column_1)
でそれぞれインデックス付けされていない場合、テーブル全体のスキャンが必要になる場合があります。これを回避するには、関数ベースのインデックスを作成します:
<code class="language-sql">create index my_index on my_table ( lower(column_1) );</code>
LIKE 演算子の場合、検索文字列の前後に % を追加します:
<code class="language-sql">select * from my_table where lower(column_1) LIKE lower('my_string') || '%';</code>
方法 2: 正規表現
Oracle 10g 以降で導入された REGEXP_LIKE() 関数は、「i」一致パラメータを指定することで大文字と小文字を区別しない検索を提供します。
<code class="language-sql">select * from my_table where regexp_like(column_1, '^my_string$', 'i');</code>
これを等価演算子として使用するには、文字列の先頭と末尾を指定します (^ と $ を使用):
<code class="language-sql">select * from my_table where regexp_like(column_1, '^my_string$', 'i');</code>
LIKE 同等の検索の場合は、^ と $ を削除します。検索文字列には、正規表現エンジンによって異なるように解釈される文字が含まれる場合があることに注意してください。
方法 3: セッションレベルの構成
NLS_SORT パラメータは、= や LIKE などの比較の並べ替え順序を定義します。 BINARY_CI:
に設定することで、セッション内のすべてのクエリに対して大文字と小文字を区別しない並べ替えを有効にできます。<code class="language-sql">alter session set nls_sort=BINARY_CI;</code>
NLS_COMP を LINGUISTIC に設定して、言語比較を強制することもできます:
<code class="language-sql">alter session set nls_comp=LINGUISTIC;</code>
パフォーマンスを向上させるために、言語インデックスを作成できます:
<code class="language-sql">create index my_linguistc_index on my_table (NLSSORT(column_1, 'NLS_SORT = BINARY_CI'));</code>
以上がOracle で大文字と小文字を区別しない検索を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。