Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Najmniejsza wartość, ale nie NULL w Oracle SQL

Jeśli jakikolwiek argument ma wartość NULL, chcesz wziąć najmniejszy z pozostałych argumentów. Jeśli wszystkie argumenty są NULL, chcesz zwrócić NULL.

Mógłbym użyć czegoś takiego dla dwóch argumentów:

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

Jednak zaczyna być brzydka dla>2 argumentów:

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

W tym momencie zacznę rozważać wartości magiczne; ale może to być błędne (np. co, jeśli jedna z wartości zgodnie z prawem jest .) wartość magiczna?):

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Optymalizacja zapytania wyroczni

  2. Jak używać typu BOOLEAN w instrukcji SELECT

  3. Zignorowano instrukcję PL/SQL SQL*Plus

  4. Łączenie się z bazą danych Oracle 12c z Pentaho Data Integration (Kettle) Community Edition

  5. Konfigurowanie odbiornika w bazie danych Oracle (edycje 12c, 18c i 19c)