2010-04-21 11 views
14

Ho bisogno di aggiornare una riga con una formula basata sul valore più grande di due colonne DATETIME. Lo farei normalmente:La colonna più grande non null

GREATEST(date_one, date_two) 

Tuttavia, entrambe le colonne possono essere NULL. Ho bisogno della massima data anche quando l'altra è NULL (ovviamente, mi aspetto NULL quando entrambi sono NULL) e GREATEST() restituisce NULL quando una delle colonne è NULL.

Questo sembra funzionare:

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

Ma mi chiedo ... mi manca un metodo più semplice?

risposta

15

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

+0

Nizza! Grazie mille. Spero solo che non avrò mai bisogno di generalizzare questo per ** n ** colonne ... ;-P –

+1

Ok, ma in cosa sono coinvolte più di 2 colonne? Cosa succede se ci sono 10 colonne? –

+0

@Vadim K. bella risposta !! – sanghavi7

0

che sembra la soluzione migliore per me. È meglio che usare NVL e una data "magica" perché non restituirebbe null se entrambi i valori fossero nulli.

1

La mia soluzione per più colonne è:

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; 
Problemi correlati