Самый большой не нулевой столбец

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

GREATEST(date_one, date_two)

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

Это работает:

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

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

Ответы

Ответ 1

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

Ответ 2

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

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;

Ответ 3

Это похоже на лучшее решение для меня. Это лучше, чем использование NVL и "волшебной" даты, потому что это не возвращает null, если оба значения равны нулю.