sql >> Databasteknik >  >> RDS >> Oracle

Minsta värde men inte NULL i Oracle SQL

Om något argument är NULL, vill du ta minsta möjliga av de andra argumenten. Om alla argument är NULL vill du returnera NULL.

Jag kan använda något liknande detta för två argument:

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

Det börjar bli fult för>2 argument dock:

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

Då skulle jag börja överväga magiska värden; men det här kan vara buggigt (t.ex. om ett av värdena legitimt är det magiska värdet?):

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


  1. Kafka Connect-inställning för att skicka post från Aurora med AWS MSK

  2. Oracle yttre skarv med filtertillstånd på det andra bordet

  3. Behöver experthjälp för att lösa mindre förändringar i rumslig datafråga

  4. SQL Buddy – ett webbaserat MySQL-administrationsverktyg