我想在我的程序中使用LEAST函数来找到最小的值.问题是某些值可能是NULL,所以如果我这样做
select least(NULL,0,1) from dual
Run Code Online (Sandbox Code Playgroud)
我得到的答案是NULL,这可能是正确的,不是我期望返回的东西.我想获得最不真实的非零值.任何帮助非常感谢.
Jef*_*emp 12
如果任何参数为NULL,则您希望至少使用其他参数.如果所有参数都为NULL,则要返回NULL.
我可能会使用这样的两个参数:
LEAST(NVL(colA,colB), NVL(colB,colA))
Run Code Online (Sandbox Code Playgroud)
它开始变得难看为> 2个参数但是:
LEAST(COALESCE(colA,colB,colC)
,COALESCE(colB,colA,colC)
,COALESCE(colC,colA,colB))
Run Code Online (Sandbox Code Playgroud)
在这一点上,我开始考虑魔术价值; 但这可能是错误的(例如,如果其中一个值合法地是神奇的价值怎么办?):
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));
Run Code Online (Sandbox Code Playgroud)
我怀疑这实际上是您的查询。也许你正在做更多这样的事情?
select least(some_column) from dual
Run Code Online (Sandbox Code Playgroud)
如果是这样,请将其更改为:
select least(some_column) from dual where some_column is not null
Run Code Online (Sandbox Code Playgroud)
或者,如果你正在做更像这样的事情,你不能只是where用来过滤集合,
select least(expr1,expr2,expr3) from dual
Run Code Online (Sandbox Code Playgroud)
做这个:
select least(coalesce(expr1, 12345), coalesce(expr2, 12345), coalesce(expr3, 12345)) from dual
Run Code Online (Sandbox Code Playgroud)
哪里12345是一个足够大的值,只有在所有其他表达式都是NULL.
| 归档时间: |
|
| 查看次数: |
13969 次 |
| 最近记录: |