我要排除表1中以“ _test
”结尾的用户帐户。
我用
select * from table1 Not Like '%_test'.
但是此查询无法正常工作。
答案 0 :(得分:5)
LIKE和NOT LIKE
没什么问题。 %
和_
是wildcards。您要求排除以test
结尾的行,并且在此行之前至少包含一个字符,任何字符。
如果要将通配符用作文字字符,请you need to escape it:
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
答案 1 :(得分:0)
在您的查询中,没有WHERE关键字和您要检查“赞”条件的列名。
SELECT * FROM Table1 WHERE
[AccountColumn] NOT LIKE '%[_]test'