Я хочу исключить учетные записи пользователей, которые заканчиваются на '_test
' в таблице 1. я использую
select * from table1 Not Like '%_test'.
Но этот запрос не работает, как ожидалось.
2 ответа
В LIKE и NOT LIKE
. %
и _
являются подстановочные знаки. Вы просили исключить строки, заканчивающиеся test
и хотя бы одним символом перед этим, любым символом.
Если вы хотите использовать подстановочный знак в качестве буквенного символа, вам нужно его избежать:
select * from table1
where SomeField not like '%[_]test'
Учитывая эту таблицу:
declare @table1 table (somefield varchar(100))
insert into @table1
values
('abc'),
('test'),
('atest'),
('ab_test'),
('_test')
Следующий запрос:
SELECT *
FROM @table1
WHERE someField NOT LIKE '%[_]test'
Возврат:
somefield
---------
abc
test
atest
Запрос original вернет:
somefield
---------
abc
test
Потому что %_test
будет соответствовать atest
ОБНОВЛЕНИЕ
Запрос возвращает пустые поля или поля, содержащие пробелы, без каких-либо изменений. Учитывая это:
declare @table1 table (ID int identity,somefield varchar(100))
insert into @table1
values
('abc'),
('test'),
('atest'),
('ab_test'),
('_test'),
(''),
(' '),
(null)
SELECT *
FROM @table1
WHERE someField not LIKE '%[_]test'
Результаты следующие:
ID somefield
1 abc
2 test
3 atest
6
7
NULL
это не просто пробел. В SQL NULL
означает «Неизвестно», и любое сравнение с ним также приводит к значению Unknown
. Четный NOT UNKNOWN
приводит к UNKNOWN
. Это означает, что ни LIKE
, ни NOT LIKE
не могут соответствовать значению NULL. Запрос должен был бы явно добавить предложение OR SomeField IS NULL
, чтобы вернуть NULL
:
SELECT *
FROM @table1
WHERE someField not LIKE '%[_]test'
OR somefield is null
Это возвращает:
ID somefield
1 abc
2 test
3 atest
6
7
8 NULL
В вашем запросе нет ключевого слова WHERE и имени столбца, для которого вы хотите проверить условие «Мне нравится».
SELECT * FROM Table1 WHERE
[AccountColumn] NOT LIKE '%[_]test'
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.