2017-08-14 466 views
0

我有一個查詢,我將一個表中的日期與另一個表中的最大日期進行比較。我遇到的問題是當日期爲空時,正在進行比較。所以採取以下查詢:oracle比較日期爲null

select col1 from table1 where date > (select max(date) from table b); 

該查詢工作正常,除了子查詢返回0行時。在0行的情況下,我希望它返回所有行。換句話說,我希望日期與日期時間最小值進行比較。因此,對於在0行的情況下,我想比較:

date > '01-01-1900' 

我一直在使用case語句,沒有運氣嘗試,但我覺得我失去了一些東西簡單。

任何幫助,將不勝感激

要使用NVL函數來協助

回答

0

(NVL(p_datefield, to_date('01/01/1901','MM/DD/YYYY')) 

這樣對你:

select col1 from table1 where date > (select max(NVL(date, to_date('01/01/1901','MM/DD/YYYY')) from table b); 

的想法是1901年1月1日代表null。如果你不喜歡它,那麼改變這個日期,以便你能夠代表你代表null

更新#1 ..下面的評論表明,COALESCE會更好地工作。它可以...所以這裏是這樣的例子:

select col1 from table1 where date > (select coalesce(date, to_date('01/01/1901','MM/DD/YYYY')) from table b); 

現在你有一個選擇。 享受。

+1

'coalesce'比'nvl' –

+0

好....我會提供兩種選擇。 – arcee123

+0

所以我更新說明的情況下,當查詢返回0行,讓它返回所有行由於事實與最短日期。這可能嗎? – Maxqueue

0

當子查詢不返回任何行時,您希望發生什麼?日期與空值的比較將導致主查詢返回任何內容 - 這在技術上是正確的響應。如果你不想這樣做,那麼你需要使用NVL function替換空值的字符串值。