我无法弄清楚为什么有时候LIKE需要ANY,有时候需要ALL,这会让我发疯。我觉得我应该能够在两种情况下都使用ANY(我试图在括号中的任何正则表达式之后选择记录)。
出于某种原因,第一个LIKE,任何一个,都可以正常工作 - 它会返回所有带有狗食,谱系或有趣的记录。
然而,第二个LIKE需要ALL。否则,它不会遗漏处理,供应或潮湿的记录。但为什么?我觉得这里的任何形式都是合适的。
where dsc_item like any ('%DOG CHOW%','%PEDIGREE%','%BENEFUL%')
and dsc_comm not like all ('%TREATS%','%SUPPLIES%', '%WET%')
答案 0 :(得分:5)
LIKE ANY
转换为OR
条件,但LIKE ALL
转换为AND
:
where
( dsc_item like '%DOG CHOW%'
OR dsc_item like '%PEDIGREE%','%BENEFUL%'
)
and
( dsc_comm not like '%TREATS%'
AND dsc_comm not like '%SUPPLIES%'
AND dsc_comm not like '%WET%'
)
如果您将AND
替换为OR
,就像col <> 1 OR col <> 2
一样,对于每个非NULL行都是如此。
答案 1 :(得分:2)
like any similar to = any
like all similar to = all
not like any similar to <> any
not like all similar to <> all
select 'My name is Inigo Montoya, you killed mhy father, prepare to die!' as str
,case when str like any ('%Inigo%','%Donald%' ,'%Hillary%') then 1 else 0 end -- 1
,case when str like any ('%Adam%' ,'%Donald%' ,'%Hillary%') then 1 else 0 end -- 0
,case when str like all ('%Inigo%','%Montoya%','%father%') then 1 else 0 end -- 1
,case when str like all ('%Inigo%','%Montoya%','%mother%') then 1 else 0 end -- 0
,case when str not like any ('%Inigo%','%Montoya%','%mother%') then 1 else 0 end -- 1
,case when str not like any ('%Inigo%','%Montoya%','%father%') then 1 else 0 end -- 0
,case when str not like all ('%Adam%' ,'%Donald%' ,'%Hillary%') then 1 else 0 end -- 1
,case when str not like all ('%Inigo%','%Donald%' ,'%Hillary%') then 1 else 0 end -- 0
;