Как сравнить строки в SQL, игнорируя регистр?
Как написать запрос в Oracle, игнорируя регистр сравниваемых строк? Например, чтобы строки "angel", "Angel", "ANGEL", "angel" и "AngEl" считались равными при сравнении.
5 ответ(ов)
Вы можете использовать:
select * from your_table where upper(your_column) like '%ANGEL%'
В противном случае вы можете воспользоваться:
select * from your_table where upper(your_column) = 'ANGEL'
Это будет более эффективно, если вам нужно найти совпадение без дополнительных символов до или после поля your_column, как предложил Гэри Рэй в своих комментариях.
Если вы хотите сопоставить полное значение поля, используйте следующий запрос:
WHERE UPPER(fieldName) = 'ANGEL'
EDIT: Судя по вашему комментарию, вы хотите использовать следующий запрос:
SELECT
RPAD(a.name, 10,'=') AS "Nombre del Cliente",
RPAD(b.name, 12,'*') AS "Nombre del Consumidor"
FROM
s_customer a,
s_region b
WHERE
a.region_id = b.id
AND UPPER(a.name) LIKE '%SPORT%'
Обратите внимание, что в данном случае для фильтрации по имени клиента применён оператор LIKE
, который позволяет находить записи, содержащие подстроку "SPORT" в любом регистре. Если вам нужно именно точное соответствие, замените LIKE
на =
.
Для того чтобы сравнивать две или более строки без учета регистра, сначала выполните следующие команды:
ALTER SESSION SET NLS_COMP=LINGUISTIC;
ALTER SESSION SET NLS_SORT=BINARY_CI;
После выполнения этих двух команд вы сможете сравнивать строки без учета регистра. Например, у вас есть две строки: s1='Apple'
и s2='apple'
. Если вы попытаетесь сравнить эти строки до выполнения указанных операторов, они будут рассматриваться как разные строки. Однако после их выполнения строки s1
и s2
будут считаться одинаковыми.
Причины использования этих двух операторов:
Для включения нечувствительности к регистру в 10gR2 необходимо установить NLS_COMP=LINGUISTIC и NLS_SORT=BINARY_CI. Поскольку эти параметры можно изменять на уровне сеанса, их нельзя просто задать в инициализационных параметрах. Мы можем установить их в инициализационных параметрах, но тогда они будут влиять только на сервер, а не на клиентскую сторону.
Функция STRCMP
в SQL сравнивает две строки и возвращает числовое значение, указывая их отношение:
SELECT STRCMP("string1", "string2");
В зависимости от результата сравнения:
- Если
string1
равноstring2
(игнорируя регистр), функция вернёт 0. - Если
string1
меньшеstring2
, функция вернёт -1. - Если
string1
большеstring2
, функция вернёт 1.
Таким образом, эту функцию можно использовать для определения порядка строк в вашей базе данных. Подробную информацию можно найти на W3Schools.
Я не помню точный синтаксис, но вы можете установить регистронезависимый режим для столбца таблицы. Однако будьте осторожны, потому что в этом случае вы не сможете сравнивать строки с учетом регистра. Если вам нужно, чтобы 'cool' не совпадал с 'CoOl', это больше не будет возможным.
Получить строки с максимальным значением в одном столбце для каждого уникального значения другого столбца
Как выполнить сброс вывода из PL/SQL в Oracle?
Тип данных Oracle Timestamp
Как посчитать количество вхождений символа в значении varchar Oracle?
Как использовать константу пакета в SQL-запросе SELECT?