如果没有字段包含字符串,则短SQL命令返回true?

时间:2012-05-07 13:56:16

标签: sql sql-server database oracle

我想要一个简短形式的SQL命令(我正在使用Oracle SQL)

SELECT * from table1 
WHERE field1 not like '%test%' 
AND field2 not like '%test%' 
AND field3 not like '%test%'

是否有与该命令等效的语法?我在考虑像

这样的东西
SELECT * from table1 
WHERE '%test%' not in (field1, field2, field3)

但遗憾的是这种语法不起作用?!非常感谢所有提示和建议。

3 个答案:

答案 0 :(得分:5)

很抱歉,我认为你不会发现任何陈述比你问题中的第一句更短或更简单。

答案 1 :(得分:4)

不,这不太可能。

使用De Morgan's laws之一进行此转换的时间略短,但只有几个字符不同:

SELECT *
FROM table1 
WHERE NOT (field1 LIKE '%test%' OR
           field2 LIKE '%test%' OR 
           field3 LIKE '%test%')

这个hack还有更短的时间,但是我建议反对它,因为它会降低你的查询性能,并在你改变字符串文字{{1}时引入错误的可能性可能包含下划线的内容,例如'%test%'

'%te_st%'

我认为你所做的是最好的解决方案。

答案 2 :(得分:1)

SELECT CASE WHEN (
    (field1 NOT LIKE '%test%') AND
    (field2 NOT LIKE '%test%') AND
    (field3 NOT LIKE '%test%')
THEN true
ELSE false AS truthiness