Oracle SQL - 选择最早的3个日期,但忽略NULL

时间:2018-05-08 19:22:32

标签: sql oracle datetime

我有这个Oracle SQL语句来获取最早的3个日期:

SELECT LEAST(DATE_1,DATE_2,DATE_3) FROM MYTABLE

但是,如果其中一个日期为NULL,则无论其他日期是否为NULL,整个LEAST函数都将返回NULL。我想获取三个日期中最早的日期,但忽略任何NULL日期,以便LEAST唯一的时间返回NULL是所有三个日期都为NULL。

我也不能让函数返回错误的日期,所以这将工作:

SELECT LEAST(NVL(DATE_1,SYSDATE),NVL(DATE_2,SYSDATE),NVL(DATE_3,SYSDATE)) FROM MYTABLE

最干净的方法是什么?

2 个答案:

答案 0 :(得分:6)

这是一种方式:

SELECT LEAST(COALESCE(DATE_1, DATE_2, DATE_3),
             COALESCE(DATE_2, DATE_1, DATE_3),
             COALESCE(DATE_3, DATE_2, DATE_1)
            )
FROM MYTABLE

答案 1 :(得分:1)

这个怎么样?

viz.js

唯一的缺点是,如果所有三个都为NULL,则返回9999-01-01而不是NULL。