我正在尝试编写Events
的SQL Server查询,这些查询属于类别5或6,但在War
中未提及Death
或EventDetails
}列。
我的查询:
select
EventName, EventDetails
from
tblEvent
where
CategoryID in (5, 6)
and (EventDetails not like '% War %'
or EventDetails not like '% Death %')
但是这会返回带有'War'字样的输出:
我的问题:
我仍然感到困惑,我们可能不知道“战争”这个词会出现在哪个地方,无论是在中间,还是在开始或结束。所以我们需要为每种可能性添加条件,比如
select EventName, EventDetails
from tblEvent
where
CategoryID in (5,6)
AND EventDetails not like '% War %'
AND EventDetails not like '% War'
AND EventDetails not like 'War %'
AND EventDetails not like '%War%'
AND EventDetails not like '% Death %'
AND EventDetails not like '% Death'
AND EventDetails not like 'Death %'
AND EventDetails not like '%Death%'
这是正确的查询标准吗?
答案 0 :(得分:1)
我想您要使用AND
代替OR
:
select EventName,
EventDetails
from tblEvent
where CategoryID in (5, 6)
and EventDetails not like '% War %'
and EventDetails not like '% Death %'
另请注意,以上内容将允许war
或WAR
等。要进行不区分大小写的搜索,您可以使用较低(或较高):
select EventName,
EventDetails
from tblEvent
where CategoryID in (5, 6)
and lower(EventDetails) not like '% war %'
and lower(EventDetails) not like '% death %'
还要考虑一下战争在句子中的最后一句话的情况。
例如:
This is a war. abcd. . .
这也是不匹配的。要使用此功能,您可能必须使用基于模式的匹配。