2017-08-14 107 views
0

私は、1つのテーブルの日付と別のテーブルの最大日付を比較しているクエリを持っています。私が抱えている問題は、日付が比較されているヌルである場合です。したがって、次のクエリを実行します。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を表すためにグリップすることができる何かにその日付を変更してください。

以下のUPDATE#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

サブクエリが行を返さないときに、どうしますか?日付とnullを比較すると、メインクエリによって何も返されません。これは技術的に正しい応答です。あなたがそれを望まないなら、NVL functionを使ってヌルの文字列値を代入する必要があります。