sql >> Databáze >  >> RDS >> Oracle

Nejmenší hodnota, ale ne NULL v Oracle SQL

Pokud má některý argument hodnotu NULL, chcete mít nejmenší z ostatních argumentů. Pokud jsou všechny argumenty NULL, chcete vrátit hodnotu NULL.

Něco takového bych mohl použít pro dva argumenty:

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

Začíná to být ošklivé pro>2 argumenty:

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

V tom okamžiku bych začal uvažovat o magických hodnotách; ale to může být chybné (např. co když jedna z hodnot oprávněně je magickou hodnotu?):

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. Aktualizujte databázi mysql z vybraného řádku datagridview

  2. Chování sql::SQLString

  3. Chyba poblíž „DELIMITER $$“

  4. Dotaz MySQL do formátu Code Igniter Active Directory?