Подтвердить что ты не робот

Oracle DB: как я могу написать запрос, игнорирующий случай?

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

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

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

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

4b9b3361

Ответ 1

Вы можете использовать операторы ALTER SESSION, чтобы установить сравнение без учета регистра. Смотрите этот FAQ.

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

Для всех, кто посетил 8 лет после принятия этого оригинального ответа (для 10gR2):

После 10gR2 настройка NLS_COMP должна быть "ЛИНГВИСТИЧЕСКАЯ":

ALTER SESSION SET NLS_COMP=LINGUISTIC;

Ответ 2

Select * from table where upper(table.name) like upper('IgNoreCaSe');

Альтернативно, замените нижний верхний.

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

 CREATE INDEX upper_index_name ON table(upper(name))

Ответ 6

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

Select * from table where upper(table.name) like upper('IgNoreCaSe')

или

Select * from table where lower(table.name) like lower('IgNoreCaSe');

Ответ 7

... также выполняет преобразование в верхнюю или нижнюю часть запроса:

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

...

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

Ответ 8

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