2012-05-07 19 views
3

我想有SQL命令的縮寫形式(我使用的是Oracle SQL)如果沒有字段包含字符串,則使用簡短的SQL命令返回true?

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) 

但這種語法不幸不起作用?!非常感謝所有提示和建議。

+1

不能在'IN'子句中使用通配符 - 每個我知道的數據庫都支持第一個查詢。 –

+0

我不認爲這樣的語法存在,如果有人知道我會更高興學習.. –

回答

4

不,這不是真的可能。

這種轉變使用De Morgan's laws一個非常略短,但這裏只有幾個字符的區別:

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

還有這個黑客是時間更短,但我建議不要它,因爲它會給你在您的查詢的性能降低,以及如果你改變了字符串文字'%test%'的東西,可以包含下劃線,例如'%te_st%'引入錯誤的方法可行:

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

我認爲你已經在做的是最好的解決方案。

+0

我通常發現charindex()或instr()工作比「like」更快。如果性能問題,您可以嘗試「charindex('test',Field1)> 0」而不是Field1,如'%test%'。 –

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

對不起,我不認爲你會發現任何語句比你的問題中的第一個陳述更短或更簡單。

相關問題