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

Mindste værdi, men ikke NULL i Oracle SQL

Hvis et argument er NULL, vil du tage det mindste af de andre argumenter. Hvis alle argumenter er NULL, vil du returnere NULL.

Jeg kan bruge noget som dette til to argumenter:

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

Det begynder dog at blive grimt for>2 argumenter:

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

På hvilket tidspunkt ville jeg begynde at overveje magiske værdier; men dette kan være buggy (hvad f.eks. hvis en af ​​værdierne lovligt er den magiske værdi?):

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. ORACLE:Materialiseret visning virker ikke, når du bruger LEFT JOIN

  2. Rails installerer mysql - Fejl ved installation af mysql2:FEJL:Kunne ikke bygge gem native udvidelse

  3. Top-N-forespørgsler og sideinddeling i Oracle

  4. Forstå Oracle-aliasing - hvorfor genkendes et alias ikke i en forespørgsel, medmindre det er pakket ind i en anden forespørgsel?