sql >> Base de Datos >  >> RDS >> Oracle

Valor mínimo pero no NULL en Oracle SQL

Si algún argumento es NULL, desea tomar el menor de los otros argumentos. Si todos los argumentos son NULL, desea devolver NULL.

Podría usar algo como esto para dos argumentos:

LEAST(NVL(colA,colB), NVL(colB,colA))

Sin embargo, comienza a ponerse feo para> 2 argumentos:

LEAST(COALESCE(colA,colB,colC)
     ,COALESCE(colB,colA,colC)
     ,COALESCE(colC,colA,colB))

En ese momento, comenzaría a considerar valores mágicos; pero esto puede tener errores (por ejemplo, ¿qué pasa si uno de los valores legítimamente es el valor mágico?):

SELECT CASE WHEN r = maxv THEN NULL ELSE r END AS result
FROM   (SELECT LEAST(NVL(:colA,maxv)
                    ,NVL(:colB,maxv)
                    ,NVL(:colC,maxv)) AS r, maxv
        FROM   (SELECT 9.999999999999999999999999999999999999999e125
                       AS maxv FROM DUAL));