2010-04-21 11 views
14

Necesito actualizar una fila con una fórmula basada en el valor más grande de dos columnas DATETIME. Normalmente haría esto:Columna no nula más grande

GREATEST(date_one, date_two) 

Sin embargo, se permite que ambas columnas sean NULL. Necesito la fecha más grande incluso cuando la otra es NULL (por supuesto, espero NULL cuando ambos son NULL) y GREATEST() devuelve NULL cuando una de las columnas es NULL.

Esto parece funcionar:

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

Pero me pregunto ... me estoy perdiendo un método más sencillo?

Respuesta

15

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

+0

Nice! Muchas gracias. Solo espero que nunca tenga que generalizar esto para ** n ** columnas ... ;-P –

+1

Bien, pero ¿qué hay más de 2 columnas involucradas? ¿Qué pasa si hay 10 columnas? –

+0

@Vadim K. ¡¡bonita respuesta !! – sanghavi7

0

que se ve como la mejor solución para mí. Es mejor que usar NVL y una fecha "mágica" porque eso no devolvería nulo si ambos valores fueran nulos.

1

Mi solución para múltiples columnas es:

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; 
Cuestiones relacionadas