Я хочу исключить учетные записи пользователей, которые заканчиваются на «_test
» в таблице 1.
я использую
select * from table1 Not Like '%_test'.
Но этот запрос не работает должным образом.
Похоже, вы пропустили WHERE
из своего фрагмента кода, также можете опубликовать сообщение об ошибке
_
— это подстановочный знак НРАВИТСЯ.
Помимо отсутствующего WHERE
, что вызовет синтаксическую ошибку, что в запросе не работает должным образом?
Нет ничего плохого в ПОДОБНО и 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
Запрос оригинальный вернет:
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
Большое спасибо, но в некоторых случаях someField пуст, я хочу включить их также, потому что в этой строке доступны другие поля, кроме someField, в настоящее время он показывает, только если есть данные, и удаляет те, которые пусты
@JP. что означает blank
? Пустая строка, пробел или NULL? Это не одно и то же. Запрос вернет пустые поля и поля с пробелами. Сравнение что-нибудь с NULL возвращает NULL, что означает, что сравнение не выполняется независимо от того, используете ли вы NOT
или нет. Вам нужно будет добавить OR someField is NULL
, чтобы покрыть NULL. Обновите вопрос и опубликуйте то, что хотите, включая образцы данных и желаемый результат.
Мы объединяем 2 таблицы: в таблице 1 столбец имени пользователя пуст, а в таблице 2, когда мы добавляем условие someField NOT LIKE '% [_] test', он также удаляет пустые столбцы, я хочу включить, даже если они пусты .
@JP. Придется снова писать тот же комментарий. blank
ничего не значит. Выложите данные и результаты. Используйте OR IS NULL
, чтобы включить нули. Запрос уже возвращает пробелы или пустые строки.
В вашем запросе нет ключевого слова WHERE и имени столбца, для которого вы хотите проверить условие «нравится».
SELECT * FROM Table1 WHERE
[AccountColumn] NOT LIKE '%[_]test'
Я думаю, он даже не компилируется? Пожалуйста, будьте ясны и конкретны - никогда говорит «не работает», что может означать тысячу вещей и, следовательно, ничего не значит.