Oracle SQL - 选择 3 个日期中最早的日期,但忽略 NULL [重复]

问题描述 投票:0回答:2

我有这个 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

最干净的方法是什么?

sql oracle-database datetime
2个回答
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
投票

这个怎么样?

SELECT
    LEAST
    (
        NVL(DATE_1,DATE '9999-01-01'),
        NVL(DATE_2,DATE '9999-01-01'),
        NVL(DATE_3,DATE '9999-01-01')
    ) LEAST_DATE
FROM MYTABLE;

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

© www.soinside.com 2019 - 2024. All rights reserved.