Oracle DB: Как я могу написать запрос, игнорируя регистр? - PullRequest
51 голосов
/ 23 июня 2009

Как я уже писал в заголовке, у меня есть SQL-запрос, запущенный на базе данных Oracle, скажем:

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

Если бы я хотел, чтобы запрос возвращал либо "IGNORECASE", "ignorecase", либо их комбинации, как это можно сделать?

Возможно ли это?

Ответы [ 8 ]

112 голосов
/ 23 июня 2009
Select * from table where upper(table.name) like upper('IgNoreCaSe');

В качестве альтернативы, заменить нижний на верхний.

36 голосов
/ 23 июня 2009

Вы можете использовать операторы 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;
28 голосов
/ 23 июня 2009

Вы можете использовать либо нижнюю, либо верхнюю функцию с обеих сторон условия where

11 голосов
/ 23 июня 2009

Вы также можете использовать регулярные выражения:

SELECT * FROM TABLE WHERE REGEXP_LIKE (TABLE.NAME,'IgNoReCaSe','i');
7 голосов
/ 23 июня 2009

Вы можете использовать функцию upper () в своем запросе, а для повышения производительности вы можете использовать базовый индекс функции

 CREATE INDEX upper_index_name ON table(upper(name))
4 голосов
/ 22 мая 2014

Вы можете преобразовать оба значения в верхний или нижний регистр, используя функции upper или lower:

Select * from table where upper(table.name) like upper('IgNoreCaSe') or lower(table.name) like lower('IgNoreCaSe');
3 голосов
/ 23 июня 2009

... также выполнить преобразование в верхний или нижний регистр за пределами запроса:

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

...

Select * from table where upper(table.name) like tableName 
0 голосов
/ 24 июня 2009

Также не забывайте об очевидном, должны ли данные в таблицах иметь регистр? Вы можете вставлять строки только в нижнем регистре (или преобразовывать существующие строки БД в нижний регистр) и делать это с самого начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...