Операторы LIKE и NOT LIKE в SQL / Ravesli
Россия и Беларусь начали и продолжают войну против целого народа Украины!
Юрий |
Обновл. 2 Фев 2023 |
86
Оператор LIKE в SQL используется с предложением WHERE
для получения данных, соответствующих заданному строковому шаблону. Например:
SELECT * FROM Customers WHERE country LIKE ‘UK’;
SELECT * FROM Customers WHERE country LIKE ‘UK’; |
Здесь мы выбираем клиентов, чья страна — Великобритания (UK).
Примечание: Хотя в этом примере оператор LIKE
ведет себя так же, как оператор =
, это не одно и то же. Оператор =
используется для проверки равенства, тогда как оператор LIKE
используется только для сопоставления строковых шаблонов.
Оператор LIKE
часто используется с подстановочными знаками (wildcards) для соответствия шаблону. Например:
SELECT * FROM Customers WHERE last_name LIKE ‘R%’;
SELECT * FROM Customers WHERE last_name LIKE ‘R%’; |
Здесь %
(означает ноль или более символов) является подстановочным знаком. Следовательно, с помощью данной команды мы выбираем клиентов, чья фамилия (last_name) начинается с буквы R
и имеет ноль или более символов после R
.
Мы можем использовать и другие подстановочные знаки с оператором LIKE
, например:
SELECT * FROM Customers WHERE country LIKE ‘U_’;
SELECT * FROM Customers WHERE country LIKE ‘U_’; |
Здесь мы выбираем клиентов, название страны которых начинается с буквы U
и сопровождается только одним символом. Подстановочный знак
_
означает один любой символ.
Мы также можем инвертировать работу оператора LIKE
и игнорировать данные, соответствующие заданному строковому шаблону, с помощью оператора NOT. Например:
SELECT * FROM Customers WHERE country NOT LIKE ‘USA’;
SELECT * FROM Customers WHERE country NOT LIKE ‘USA’; |
Здесь мы выбираем всех клиентов, кроме тех, чья страна — США (USA).
Мы можем использовать оператор LIKE
с несколькими строковыми шаблонами для соответствия с помощью оператора OR
. Например:
SELECT * FROM Customers WHERE last_name LIKE ‘R%t’ OR last_name LIKE ‘%e’;
SELECT * FROM Customers WHERE last_name LIKE ‘R%t’ OR last_name LIKE ‘%e’; |
Здесь мы выбираем клиентов, чья фамилия (last_name) начинается с буквы R и заканчивается буквой t, или клиентов, чья фамилия заканчивается буквой e.
Оценить статью:
Загрузка…
sql server 2008 — SQL-запрос с NOT LIKE IN
спросил
Изменено 1 месяц назад
Просмотрено 430 тысяч раз
Пожалуйста, помогите мне написать SQL-запрос с условием «НЕ НРАВИТСЯ В»
Выберите * из таблицы 1, где EmpPU НЕ НРАВИТСЯ В ('%CSE%', '%ECE%', '%EEE%')
Получение ошибки.
- sql
- sql-сервер-2008
- tsql
1
Вы не можете комбинировать like и in. Приведенный ниже оператор сделает эту работу:
Выберите * из Table1 где EmpPU НЕ Нравится '%CSE%' И EmpPU НЕ НРАВИТСЯ "%ECE%" И EmpPU НЕ Нравится '%EEE%'
0
Это потому, что вы смешиваете два синтаксиса.
Если у вас всегда есть именно эти три значения, вы можете просто использовать AND результаты трех выражений LIKE.
ВЫБОР * ОТ Таблица 1 ГДЕ EmpPU НЕ КАК '%CSE%' И EmpPU НЕ НРАВИТСЯ '%ECE%' И EmpPU НЕ НРАВИТСЯ '%EEE%'
Если вам нужно сделать это для «любого количества» значений, вы можете поместить значения в таблицу и выполнить соединение.
С мои данные КАК ( ВЫБЕРИТЕ '%CSE%' КАК соответствует UNION ALL SELECT '%ECE%' AS соответствует UNION ALL SELECT '%EEE%' AS соответствует ) ВЫБИРАТЬ * ОТ Таблица 1 ЛЕВОЕ СОЕДИНЕНИЕ мои данные ON Table1.EmpPU КАК myData.match ГДЕ myData.match имеет значение NULL
ИЛИ…
С мои данные КАК ( ВЫБЕРИТЕ '%CSE%' КАК соответствует UNION ALL SELECT '%ECE%' AS соответствует UNION ALL SELECT '%EEE%' AS соответствует ) ВЫБИРАТЬ * ОТ Таблица 1 ГДЕ НЕ СУЩЕСТВУЕТ (SELECT * FROM myData WHERE Table1.EmpPU LIKE match)
Если у вас есть набор слов, которые вы хотите включить/исключить при поиске из определенного столбца.
Исключить набор слов из столбца:
SELECT * ОТ Таблица 1 ГДЕ EmpPU NOT REGEXP 'CSE|ECE|EEE';
Поиск набора слов из столбца:
SELECT * ОТ Таблица 1 ГДЕ EmpPU REGEXP 'CSE|ECE|EEE';
2
нельзя комбинировать LIKE и IN
можно:
выбрать * из таблицы 1 где EmpPU отсутствует ('%CSE%', '%ECE%', '%EEE%')
, но вы не получите преимущества от подстановочного знака %
, если вам нужен %, единственный вариант:
Выберите * из таблицы 1 где EmpPU не похож на «%CSE%», а EmpPU не похож на «%ECE%» и EmpPU не похож на «%EEE%»
3
Или вы можете сделать это так:
ВЫБЕРИТЕ * ОТ Таблица 1 ГДЕ НЕ СУЩЕСТВУЕТ ( ВЫБИРАТЬ НУЛЕВОЙ ОТ ( ВЫБРАТЬ '%CSE%' КАК столбец 1 ОБЪЕДИНИТЬ ВСЕ ВЫБЕРИТЕ '%ECE%' ОБЪЕДИНЕНИЕ ВСЕХ ВЫБЕРИТЕ '%EEE%' ) AS табл.ГДЕ Table1.EmpPU LIKE tbl.column1 )
вы можете попробовать это
Выберите * из таблицы 1, где EmpPU НЕ Нравится '%CSE%' И EmpPU НЕ НРАВИТСЯ "%ECE%" И EmpPU НЕ Нравится '%EEE%'
2
Ниже приведен код:
Выберите * из таблицы 1, где (EmpPU НЕ Нравится «%CSE%» ИЛИ EmpPU НЕ Нравится '%ECE%' ИЛИ EmpPU НЕ Нравится '%EEE%')
Или используйте , КРОМЕ
:
SELECT * FROM Table1 КРОМЕ ВЫБЕРИТЕ * ИЗ Таблицы 1 ГДЕ EmpPU НРАВИТСЯ '%CSE%' ИЛИ EmpPU КАК '%ECE%' ИЛИ EmpPU КАК '%EEE%'
Вы можете использовать STRING_SPLIT SQL Server и сочетание подстановочных знаков.
DECLARE @IgnoreWords NVARCHAR(MAX)= '%Word1%,%Word2,Word3%,Word4'; ВЫБЕРИТЕ MyTable.MyCol ОТ (ВЫБЕРИТЕ 'xxWord1xx' КАК MyCol) КАК MyTable ГДЕ НЕ СУЩЕСТВУЕТ (ВЫБЕРИТЕ ИЗ (ВЫБЕРИТЕ значение AS ToIgnore FROM STRING_SPLIT(@IgnoreWords, ',')) AS Words ГДЕ MyTable.MyCol LIKE Words.ToIgnore)
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Обязательно, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
где — Оператор SQL Not Like не работает
спросил
Изменено 9 лет назад
Просмотрено 214 тысяч раз
У меня есть следующий код в хранимой процедуре.
ГДЕ WPP.ACCEPTED = 1 И WPI.EMAIL LIKE '%@MATH.UCLA.EDU%' И (WPP.SPEAKER = 0 ИЛИ WPP.SPEAKER IS NULL) И WPP.COMMENT НЕ КАК '%CORE%' И WPP.ПРОГРАММНЫЙ КОД = 'cmaws3'
Оператор NOT LIKE не работает, и да, прежде чем кто-либо скажет что-либо, есть элементы со столбцом COMMENT, который не включает CORE, а все остальные столбцы в порядке.
Кто-нибудь знает, что с этим не так?
- sql
- где
- sql-подобный
7
Если WPP.COMMENT
содержит NULL
, условие не будет совпадать.
Этот запрос:
ВЫБЕРИТЕ 1 ГДЕ NULL НЕ НРАВИТСЯ '%test%'
ничего не вернет.
В столбце NULL
обе команды LIKE
и NOT LIKE
для любой строки поиска вернут NULL
.
Не могли бы вы опубликовать соответствующие значения строки, которая, по вашему мнению, должна быть возвращена, но это не так?
Только что наткнулся на это, ответ прост, используйте ISNULL
![](/800/600/http/3.bp.blogspot.com/-_M1rsMxGRq8/VSBMUiNOTTI/AAAAAAAAAlA/kBV4oWjswFM/s1600/SQL%2BLIKE%2BKullan%C4%B1m%C4%B1.png)
ГДЕ wpp.comment НЕ КАК '%CORE%'
Итак, вы временно подставили значение в null
(пустые) записи с помощью команды ISNULL
, например
WHERE (ISNULL(wpp.comment,'')) NOT LIKE '%CORE%'
После этого будут показаны все ваши записи, содержащие пустые значения, и будут пропущены те, которые соответствуют вашим критериям соответствия. Если вы хотите, вы можете поместить что-то в запятые, чтобы помочь вам запомнить, например,
WHERE (ISNULL(wpp.comment,'some_records_have_no_value')) NOT LIKE '%CORE%'
0
Является ли значение вашего конкретного столбца COMMENT пустым?
Иногда NOT LIKE не знает, как правильно вести себя с нулевыми значениями.
Я только что столкнулся с той же проблемой и решил ее, но не раньше, чем нашел этот пост.