2010-04-21 3 views
14

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

GREATEST(date_one, date_two) 

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

Это похоже на работу:

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

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

ответ

15

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

+0

Nice! Большое спасибо. Я просто надеюсь, что мне никогда не понадобится обобщать это для ** n ** столбцов ... ;-P –

+1

Хорошо, но в чем состоит более двух столбцов? Что, если 10 столбцов? –

+0

@Vadim K. приятный ответ !! – sanghavi7

0

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

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; 
Смежные вопросы