我想在我的程序中使用函数 LEAST 来查找最小值。问题是有些值可能是 NULL,所以如果我这样做
select least(NULL,0,1) from dual
我得到的答案是 NULL,这可能是正确的,因为这不是我期望返回的内容。我想获得最小的真实非零值。非常感谢任何帮助。
最佳答案
如果任何参数为 NULL,则您希望采用其他参数中的最少值。如果所有参数均为 NULL,则您希望返回 NULL。
我可能会使用这样的两个参数:
LEAST(NVL(colA,colB), NVL(colB,colA))
尽管有 >2 个参数,它开始变得丑陋:
LEAST(COALESCE(colA,colB,colC)
,COALESCE(colB,colA,colC)
,COALESCE(colC,colA,colB))
此时我会开始考虑魔法值;但这可能有问题(例如,如果合法值之一是魔法值怎么办?):
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));
关于sql - Oracle SQL 中最小值但不为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21313770/