Как сравнить строки в SQL без учета регистра? - PullRequest
36 голосов
/ 16 мая 2009

Как мне написать запрос в Oracle, игнорируя регистр сравниваемых строк? Например, «ангел», «ангел», «ангел», «ангел», «ангел» все будут равны при сравнении.

Ответы [ 6 ]

50 голосов
/ 16 мая 2009

Если вы соответствуете полному значению поля, используйте

WHERE UPPER(fieldName) = 'ANGEL'

РЕДАКТИРОВАТЬ: Из вашего комментария вы хотите использовать:

SELECT 
    RPAD(a.name, 10,'=') "Nombre del Cliente"
    , RPAD(b.name, 12,'*') "Nombre del Consumidor" 
FROM 
    s_customer a, 
    s_region b 
WHERE 
    a.region_id = b.id 
    AND UPPER(a.name) LIKE '%SPORT%' 
17 голосов
/ 16 мая 2009

Вы можете использовать ключевое слово UPPER :

SELECT *
FROM Customers
WHERE UPPER(LastName) = UPPER('AnGel')
10 голосов
/ 16 мая 2009

Вы можете использовать:

select * from your_table where upper(your_column) like '%ANGEL%'

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

select * from your_table where upper(your_column) = 'ANGEL'

Что будет более эффективно, если вы ищете совпадение без дополнительных символов до или после поля your_column , как предложил Гари Рэй в своих комментариях.

5 голосов
/ 25 июля 2014

перед сравнением двух или более строк сначала выполните следующие команды

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

после выполнения этих двух операторов вы можете сравнить строки, и будет учитываться регистр. Например, у вас есть две строки s1 = 'Apple' и s2 = 'apple', если вы хотите сравнить две строки перед выполнением В приведенных выше инструкциях эти две строки будут рассматриваться как две разные строки, но когда вы сравниваете строки после выполнения двух операторов alter, эти две строки s1 и s2 будут рассматриваться как одна и та же строка

причины использования этих двух утверждений

Нам нужно установить NLS_COMP = LINGUISTIC и NLS_SORT = BINARY_CI, чтобы использовать 10gR2 нечувствительность к регистру. Так как они могут быть изменены в сеансе, это не так просто, как установить их в параметрах инициализации. Мы можем установить их в параметрах инициализации, но тогда они влияют только на сервер, а не на клиентскую сторону.

2 голосов
/ 18 мая 2009

Более подробно об ответе г-на Дределя и комментарии Туинстоуля. Данные в столбце будут храниться в своем конкретном случае, но вы можете изменить чувствительность к регистру сеанса для сопоставления.

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

например

ALTER SESSION SET NLS_SORT=BINARY_CI;

Как только вы начинаете изучать неанглийские языки с акцентами и так далее, появляется дополнительная поддержка нечувствительного к акценту. Некоторые возможности зависят от версии, поэтому ознакомьтесь с документом Globablization для конкретной версии Oracle. Последний (11 г) - здесь

0 голосов
/ 16 мая 2009

Я не помню точный синтаксис, но вы можете установить столбец таблицы без учета регистра. Но будьте осторожны, потому что тогда вы больше не сможете совпадать в зависимости от случая, и если вы ХОТИТЕ «круто» не соответствовать «CoOl», это больше не будет возможно.

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