首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >NOT LIKE和LIKE不返回相反的结果

NOT LIKE和LIKE不返回相反的结果
EN

Stack Overflow用户
提问于 2016-11-02 17:20:08
回答 2查看 6.4K关注 0票数 54

我有一个包含200条记录的表,其中有10条记录的文本包含单词“TAX”。

当我执行的时候

代码语言:javascript
复制
Select * from tbl1 WHERE [TextCol] LIKE '%TAX%'

然后,我正确地获得了这10条记录的结果集。

但是当我尝试通过以下方式排除这些记录时

代码语言:javascript
复制
Select * from tbl1 WHERE [TextCol] NOT LIKE '%TAX%'

它只返回100条记录,而不是190条。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-02 17:24:50

这是否返回正确的结果?

代码语言:javascript
复制
Select * from tbl1 WHERE COALESCE([TextCol],'-1') NOT LIKE '%TAX%'

我认为NULL值是这里的问题所在,如果列中包含它们,那么NULL NOT LIKE '%TAX%'将返回UNKNOWN/NULL,因此不会被选中。

我建议您阅读有关handling with NULL valueshere的内容。

正如@ughai建议的那样,如果性能是一个问题,你也可以使用:

代码语言:javascript
复制
  Select * from tbl1 
  WHERE [TextCol] NOT LIKE '%TAX%'
     OR [TextCol] IS NULL
票数 75
EN

Stack Overflow用户

发布于 2018-12-12 06:36:50

我在简单的包含空值的整型列上使用IN运算符时也遇到了同样的问题。我发现这些地方并不像我想的那样相反。(我可以通过行数来判断)

代码语言:javascript
复制
select * from Dest where id in(select id from Source)
select * from Dest where id NOT in(select id from Source)

为了让彼此颠倒过来,我不得不将它们重写为:

代码语言:javascript
复制
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) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40376260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档