我有一个包含200条记录的表,其中有10条记录的文本包含单词“TAX”。
当我执行的时候
Select * from tbl1 WHERE [TextCol] LIKE '%TAX%'
然后,我正确地获得了这10条记录的结果集。
但是当我尝试通过以下方式排除这些记录时
Select * from tbl1 WHERE [TextCol] NOT LIKE '%TAX%'
它只返回100条记录,而不是190条。
发布于 2016-11-02 17:24:50
这是否返回正确的结果?
Select * from tbl1 WHERE COALESCE([TextCol],'-1') NOT LIKE '%TAX%'
我认为NULL
值是这里的问题所在,如果列中包含它们,那么NULL NOT LIKE '%TAX%'
将返回UNKNOWN/NULL
,因此不会被选中。
我建议您阅读有关handling with NULL
values或here的内容。
正如@ughai建议的那样,如果性能是一个问题,你也可以使用:
Select * from tbl1
WHERE [TextCol] NOT LIKE '%TAX%'
OR [TextCol] IS NULL
发布于 2018-12-12 06:36:50
我在简单的包含空值的整型列上使用IN
运算符时也遇到了同样的问题。我发现这些地方并不像我想的那样相反。(我可以通过行数来判断)
select * from Dest where id in(select id from Source)
select * from Dest where id NOT in(select id from Source)
为了让彼此颠倒过来,我不得不将它们重写为:
select * from Dest where isnull(id,-2) in(select isnull(id,-1) from Source)
select * from Dest where isnull(id,-2) NOT in(select isnull(id,-1) from Source)
https://stackoverflow.com/questions/40376260
复制相似问题