ホームページ > データベース > mysql チュートリアル > Oracle で大文字と小文字を区別しない検索を実行するにはどうすればよいですか?

Oracle で大文字と小文字を区別しない検索を実行するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-17 11:31:09
オリジナル
769 人が閲覧しました

How to Perform Case-Insensitive Searches in Oracle?

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_1upper(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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート