2015-06-09 37 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