2015-06-09 59 views
2

以下面的查詢......的Oracle SQL最小值不爲空

select 
    trunc(dateX)-trunc(sysdate) daysTilX, 
    trunc(dateY)-trunc(sysdate) daysTilY, 
    least(trunc(dateX)-trunc(sysdate),trunc(dateY)-trunc(sysdate)) leastOfTheTwo 
from myTable 

如果德恩或dateY爲null,則least()返回null。我需要弄清楚如何使leastOfTheTwo列僅在dateX和dateY都爲空時才返回null,否則我需要這個數字。有任何想法嗎?

UPDATE要清楚,我不能在日期中使用nvl,因爲它們表示到期日期。含義-1(晚一天),0(今天),1(明天),零(既無到期日也沒有)。

+0

是的,你可以使用NVL,只是沒有用0替換空請參見下面的回答。你會看到它的工作原理。 – sstan

回答

1
select 
    trunc(dateX)-trunc(sysdate) daysTilX, 
    trunc(dateY)-trunc(sysdate) daysTilY, 
    least(trunc(nvl(dateX, dateY))-trunc(sysdate),trunc(nvl(dateY, dateX))-trunc(sysdate)) leastOfTheTwo 
from myTable 
+0

這樣做,謝謝,不能相信我沒有想到,漫長的一天! – gfrobenius

0
select 
    trunc(dateX)-trunc(sysdate) daysTilX, 
    trunc(dateY)-trunc(sysdate) daysTilY, 
    least(nvl(trunc(dateX)-trunc(sysdate),0),nvl(trunc(dateY)-trunc(sysdate),0)) leastOfTheTwo 
from myTable 
+0

謝謝,但這對我不起作用,因爲它會使空值看起來像今天全部到期(0)。這些代表到期日。含義-1(晚一天),0(今天),1(明天),零(既無到期日也沒有)。所以我不能改變數字。 null表示截止日期從未設置並且需要保持爲空。 – gfrobenius

+0

啊,我的壞。 .. – OldProgrammer

+0

不用擔心。我應該在最初指定。 – gfrobenius