Я хочу исключить учетные записи пользователей, которые заканчиваются на '_test' в таблице 1. я использую

select * from table1 Not Like '%_test'.

Но этот запрос не работает, как ожидалось.

0
JP. 28 Май 2019 в 11:03

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

< Сильный > UPDATE

Запрос возвращает пустые поля или поля, содержащие пробелы, без каких-либо изменений. Учитывая это:

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
5
Panagiotis Kanavos 29 Май 2019 в 07:37

В вашем запросе нет ключевого слова WHERE и имени столбца, для которого вы хотите проверить условие «Мне нравится».

SELECT * FROM Table1 WHERE
[AccountColumn] NOT LIKE '%[_]test'
0
Coskun Ozogul 28 Май 2019 в 08:10