我有这个 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
最干净的方法是什么?
这是一种方法:
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
这个怎么样?
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。