Ответ 1
COALESCE(GREATEST(date_one, date_two), date_one, date_two)
Мне нужно обновить строку формулой, основанной на наибольшем значении двух столбцов DATETIME. Обычно я это делаю:
GREATEST(date_one, date_two)
Однако оба столбца имеют значение NULL. Мне нужна самая большая дата, даже если другая имеет значение NULL (конечно, я ожидаю, что NULL, когда оба значения NULL), а GREATEST()
возвращает NULL, когда один из столбцов равен NULL.
Это работает:
GREATEST(COALESCE(date_one, date_two), COALESCE(date_two, date_one))
Но мне интересно... я пропустил более простой метод?
COALESCE(GREATEST(date_one, date_two), date_one, date_two)
Мое решение для нескольких столбцов:
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;
Это похоже на лучшее решение для меня. Это лучше, чем использование NVL и "волшебной" даты, потому что это не возвращает null, если оба значения равны нулю.