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ị là 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));