Oracle
 sql >> Database >  >> RDS >> Oracle

Valore minimo ma non NULL in Oracle SQL

Se un argomento è NULL, vuoi prendere il minimo degli altri argomenti. Se tutti gli argomenti sono NULL, vuoi restituire NULL.

Potrei usare qualcosa del genere per due argomenti:

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

Tuttavia, inizia a diventare brutto per>2 argomenti:

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

A quel punto inizierei a considerare i valori magici; ma questo può essere difettoso (ad esempio cosa succede se uno dei valori legittimamente è il valore magico?):

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