web-dev-qa-db-ja.com

Oracle DB:大文字小文字を区別せずにクエリを作成するにはどうすればよいですか?

タイトルで書いたように、SQLクエリがあり、Oracle DBで実行します。

SELECT * FROM TABLE WHERE TABLE.NAME Like 'IgNoReCaSe'

クエリが「IGNORECASE」、「ignorecase」、またはそれらの組み合わせのいずれかを返すようにしたい場合、どのようにこれを行うことができますか?

これは可能ですか?

52
zeroDivisible

ALTER SESSION文を使用して、大文字と小文字を区別しない比較を設定できます。 このFAQ を参照してください。

alter session set NLS_COMP=ANSI;
alter session set NLS_SORT=BINARY_CI;

この元の回答が受け入れられてから8年後に訪問するすべての人(10gR2の場合):

10gR2の後、NLS_COMP設定は「LINGUISTIC」である必要があります。

ALTER SESSION SET NLS_COMP=LINGUISTIC;
36
devio
Select * from table where upper(table.name) like upper('IgNoreCaSe');

または、上部を下部に置き換えます。

114
Hooloovoo

Where条件の両側でlowerまたはupper関数を使用できます

28
joe

正規表現も使用できます。

SELECT * FROM TABLE WHERE REGEXP_LIKE (TABLE.NAME,'IgNoReCaSe','i');
11
kMAP

クエリでupper()関数を使用できます。パフォーマンスを向上させるには、関数ベースのインデックスを使用できます

 CREATE INDEX upper_index_name ON table(upper(name))
7
akf

upperまたはlower関数を使用して、両方の値を大文字または小文字に変換できます。

Select * from table where upper(table.name) like upper('IgNoreCaSe') or lower(table.name) like lower('IgNoreCaSe');
4
user3666177

...クエリの外部で上位または下位への変換も行います。

tableName:= UPPER(someValue || '%');

...

Select * from table where upper(table.name) like tableName 
3
ozczecho

また、明らかなことを忘れないでください、テーブルのデータは大文字と小文字を区別する必要がありますか?すでに小文字で行を挿入する(または既存のDB行を小文字に変換する)だけで、最初から行を完了することができます。

0
Gandalf