3

我想要一个简短形式的 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)

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

4

3 回答 3

5

抱歉,伙计,我认为您不会找到比问题中的第一个陈述更短或更简单的陈述。

于 2012-05-07T13:59:22.467 回答
4

不,这真的不可能。

使用德摩根定律之一的这种转换非常短,但只有几个字符差异:

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

'%test%'还有一个更短的hack,但我建议不要这样做,因为如果您将字符串文字更改为可能包含下划线的内容,它会降低您的查询性能以及引入错误的可能性,例如'%te_st%'

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

我认为您已经在做的是最好的解决方案。

于 2012-05-07T14:00:19.843 回答
1
SELECT CASE WHEN (
    (field1 NOT LIKE '%test%') AND
    (field2 NOT LIKE '%test%') AND
    (field3 NOT LIKE '%test%')
THEN true
ELSE false AS truthiness
于 2012-05-07T13:58:56.867 回答