sql - NOT LIKE 和 LIKE 不返回相反的结果

标签 sql sql-server tsql sql-like

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

当我执行时

Select * from tbl1 WHERE [TextCol] LIKE '%TAX%'

然后我正确地得到了包含这 10 条记录的结果集。

但是当我尝试通过

排除这些记录时
Select * from tbl1 WHERE [TextCol] NOT LIKE '%TAX%'

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

最佳答案

这会返回正确的结果吗?

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

关于sql - NOT LIKE 和 LIKE 不返回相反的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40376260/

相关文章:

sql - TSQL 连接查询

SQL Server : coalesce, 阻止额外空间?

mysql - 向 SELECT 查询添加更多特异性会使其更快吗?

sql - 土耳其语 SQL 排序规则问题(土耳其语 "I")

sql - 简单的更新语句,以便为所有行分配不同的值

sql - "Data Load"或 "ETL"的工具——从 SQL Server 到 Amazon Redshift

SQL查询选择每个员工的每种类型的表单

sql-server - T-SQL 写入文件 txt 或 csv

sql - 如何从 VB.net 编写日期来 Access 数据库

sql - 如何用单引号插入文本sql server 2005