我有一张包含31,483条记录的表格。我想使用LIKE和NOT LIKE运算符搜索此表。用户可以选择包含或不包含选项。
当我执行LIKE时,where子句如下
WHERE Model LIKE '%test%'
将结果集过滤到1345条记录 - 所以一切都很好,Dandy
无论其
我预计在表上运行不喜欢会导致 n条记录,其中n = totalRowCount - LikeResultSet ,这会导致运行NOT LIKE操作时预期的记录数为30138。
我运行了这个WHERE子句:
WHERE Model NOT LIKE '%test%'
然而它返回了30526条记录。
我假设有一些我没有意识到的NOT LIKE运算符的复杂性。
所以我的问题
为什么我没有收到TotalRows的记录数 - LikeResults?
我正在使用SQL Server Compact 4.0 C# Visual Studio 2012
答案 0 :(得分:1)
检查某些模型值是否为 nulls ,例如对于简单的人工桌
with data as (
select 'test' as model
union all
select 'abc'
union all
select 'def'
union all
select null -- <- That's vital
)
你会得到
-- 4 items
select count(1)
from data
-- 1 item: 'test'
select count(1)
from data
where model like '%test%'
-- 2 items: 'abc' and 'def'
select count(1)
from data
where model not like '%test%'
所以 1 + 2!= 4
答案 1 :(得分:0)
您的数据中有NULL
个值,LIKE
会忽略NULL
值。
您可以对此进行测试并查看行为。
create table a
(
nama varchar(30)
)
insert into a values ('iswanto');
insert into a values (null);
insert into a values ('joko');
insert into a values ('tukul');
insert into a values ('iswanto2');
insert into a values (null);
select * from a where nama like '%w%' // 2 record
select * from a where nama not like '%w%' // 2 record
如果您想在查询中包含NULL
值,请尝试使用COALESCE函数。
select * from a where coalesce(nama, '') like '%w%' // 2 record
select * from a where coalesce(nama, '') not like '%w%' // 4 record
答案 2 :(得分:0)
您的WHERE
子句应更改为WHERE ISNULL(Model,'') LIKE '%test%'
以使用空字符串替换NULL。
答案 3 :(得分:0)
因为想要忽略空字段值而在查询中设置try isnull()函数。
WHERE Model NOT LIKE '%test%' || isnull(Model)
它将返回30138条记录