Операторы 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)
Если у вас есть набор слов, которые вы хотите включить/исключить при поиске из определенного столбца.
Вы можете использовать функцию регулярных выражений mysql.Исключить набор слов из столбца:
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
ГДЕ 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 не знает, как правильно вести себя с нулевыми значениями.
Я только что столкнулся с той же проблемой и решил ее, но не раньше, чем нашел этот пост.