Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Kleinster Wert, aber nicht NULL in Oracle SQL

Wenn ein Argument NULL ist, möchten Sie das kleinste der anderen Argumente nehmen. Wenn alle Argumente NULL sind, möchten Sie NULL zurückgeben.

Ich könnte so etwas für zwei Argumente verwenden:

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

Für>2 Argumente wird es jedoch hässlich:

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

An diesem Punkt würde ich anfangen, über magische Werte nachzudenken; aber das kann fehlerhaft sein (z. B. was ist, wenn einer der Werte rechtmäßig ist der magische Wert?):

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