14

我需要使用基于两个 DATETIME 列的最大值的公式更新一行。我通常会这样做:

GREATEST(date_one, date_two)

但是,两列都允许为 NULL。即使另一个为 NULL,我也需要最大日期(当然,当两者都为 NULL 时,我希望为 NULL)并且GREATEST()当其中一列为 NULL 时返回 NULL。

这似乎有效:

GREATEST(COALESCE(date_one, date_two), COALESCE(date_two, date_one))

但我想知道......我是否错过了更直接的方法?

4

2 回答 2

15

COALESCE(GREATEST(date_one, date_two), date_one, date_two)

于 2010-04-21T15:15:19.497 回答
1

我对多列的解决方案是:

SELECT NULLIF(
  GREATEST(
    NVL(NULL,     to_date('01011980','ddmmyyyy')), --COLUMN 1
    NVL(sysdate,  to_date('01011980','ddmmyyyy')), --COLUMN 2
    NVL(NULL,     to_date('01011980','ddmmyyyy')), --COLUMN 3
    NVL(sysdate-1,to_date('01011980','ddmmyyyy'))  --COLUMN 4
  ),to_date('01011980','ddmmyyyy')
) as greatest_date
FROM DUAL;
于 2014-10-14T13:23:18.137 回答