首页 > 解决方案 > Oracle SQL - 选择 3 个日期中最早的日期,但忽略 NULL

问题描述

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

SELECT LEAST(DATE_1,DATE_2,DATE_3) FROM MYTABLE

但是,如果其中一个日期为 NULL,则整个 LEAST 函数将返回 NULL,而不管其他日期是否不为 NULL。我想获得三个日期中最旧的日期,但忽略任何 NULL 日期,以便 LEAST 返回 NULL 的唯一时间是所有三个日期都为 NULL 的情况。

我也不能让函数返回不正确的日期,所以这不起作用

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

最干净的方法是什么?

标签: sqloracledatetime

解决方案


这是一种方法:

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

推荐阅读