Oracle
 sql >> Base de données >  >> RDS >> Oracle

La plus petite valeur mais pas NULL dans Oracle SQL

Si un argument est NULL, vous voulez prendre le plus petit des autres arguments. Si tous les arguments sont NULL, vous voulez retourner NULL.

Je pourrais utiliser quelque chose comme ça pour deux arguments :

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

Cela commence à devenir moche pour> 2 arguments cependant :

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

À quel point je commencerais à considérer les valeurs magiques ; mais cela peut être bogué (par exemple, que se passe-t-il si l'une des valeurs légitimement est la valeur magique ?) :

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));