Величайший ненулевой столбец - PullRequest
14 голосов
/ 21 апреля 2010

Мне нужно обновить строку формулой, основанной на наибольшем значении двух столбцов DATETIME. Я обычно делал бы это:

GREATEST(date_one, date_two)

Однако оба столбца могут иметь значение NULL. Мне нужна наибольшая дата, даже когда другой равен NULL (конечно, я ожидаю NULL, когда оба NULL), и GREATEST() возвращает NULL, если один из столбцов равен NULL.

Кажется, это работает:

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

Но мне интересно ... я упускаю более простой метод?

Ответы [ 2 ]

15 голосов
/ 21 апреля 2010

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

1 голос
/ 14 октября 2014

Мое решение для нескольких столбцов:

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;
...