2014-09-25 53 views
0

我想在Oracle中編寫一個查詢,它將返回表中任何行的計數,並在任何滿足其他參數的字段中返回空值。現在,我只是使用如何編寫在任何字段中查找空值的查詢?

select count(*) from my_table where trunc(sent)>(to_date('01-APR-01', 'DD-Mon-YY')) and 
field_1=null 
or field_2=null 
or field_3=null 
etc. 

有沒有更好的方法來做到這一點?並且將「和」與「或」我以我想要的方式工作的方式相結合?

+1

爲什麼是'TRUNC( )''發送'列需要'功能嗎?如果TRUNC(發送)> TRUNC(dt)',那麼我們知道'sent> = TRUNC(dt + 1)'。我認爲有一種更明確的方式來表達'sent'是在4月2日午夜之後或者之後的一種方式,並且這種方式不會使Oracle不能有效地使用帶有'sent'的前導列的索引。 – spencer7593 2014-09-25 01:35:51

+0

創建一個'UDF',並查詢'ALL_TAB_COLUMNS',讓Oracle爲你做其餘的東西。查看我的答案瞭解更多詳情。 – 2014-09-25 08:39:35

回答

3

不可以,也可以用不同的方式來表示它(例如使用COALESCE而不是OR),但是不管你做什麼,你都必須明確地枚舉所有的列,所以它沒有真正的區別。

更重要的是,雖然x = null完全不起作用。您需要使用x IS NULL

將結合「和」與「或」我的工作方式的方式,我希望它

有疑問時,使用括號:

WHERE a AND (b OR c OR d) 
+0

非常好。另外,我剛剛意識到我的原始問題並不完整。你雖然回答了一半!如果沒有問題,我會回去編輯它以使其完成。 – will 2014-09-25 01:21:46