Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Giá trị thấp nhất nhưng không phải NULL trong Oracle SQL

Nếu bất kỳ đối số nào là NULL, bạn muốn lấy ít nhất trong (các) đối số khác. Nếu tất cả các đối số là NULL, bạn muốn trả về NULL.

Tôi có thể sử dụng một cái gì đó như thế này cho hai đối số:

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

Mặc dù vậy, nó bắt đầu trở nên xấu hơn đối với> 2 đối số:

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

Tại thời điểm đó, tôi sẽ bắt đầu xem xét các giá trị ma thuật; nhưng điều này có thể có lỗi (ví dụ:điều gì xảy ra nếu một trong các giá trị hợp pháp giá trị kỳ diệu?):

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. Cuộc phiêu lưu mua hàng nhẹ nhàng

  2. Nhận 10 sản phẩm hàng đầu cho mọi danh mục

  3. Làm thế nào để tránh các giá trị 0 bằng cách sử dụng hàm MIN và MAX trong SQL?

  4. Thay đổi tiêu đề trang dựa trên mục trong Oracle APEX 4.0

  5. Chia tỷ lệ của giá trị thập phân dẫn đến việc cắt ngắn dữ liệu qua ODBC