我试图将Case Case用于以下
SELECT .. to_number(nvl(il.var1,0)) * to_number(nvl(il.var2,0)) * to_number(nvl(il.var3,0))/1000000 AS calculated_value,
有时,var1或var2或var3都会在其中包含字母(脏数据),我的查询将返回错误。
如何使用case语句构造我的查询,其中如果等式的结果不返回有效数字或var1 | VAR2 | var3不是整数,将calculated_value设置为" 0"或"空"只为那一排?
答案 0 :(得分:1)
尝试检查那些VARx是否真的是数字。例如:
from ...
where regexp_like(il.var1, '^\d+$')
and regexp_like(il.var2, '^\d+$')
and regexp_like(il.var3, '^\d+$')
[编辑]啊哈,你仍然希望得到一些结果。
然后你要使用这样的东西:如果VARx不是数字,请使用" 0" (零),最终结果为0。
select case when not regexp_like(il.var1, '^\d+$') then 0
else il.var1
end
*
case when not regexp_like(il.var2, '^\d+$') then 0
else il.var2
end
as result
from ...
答案 1 :(得分:1)
SELECT
CASE WHEN ((REGEXP_LIKE (il.var1,'^-?\d+(\.\d+)?$')
OR (REGEXP_LIKE (il.var2,'^-?\d+(\.\d+)?$')
OR (REGEXP_LIKE (il.var3,'^-?\d+ (\.\d+)?$'))
THEN 0
ELSE
to_number(nvl(il.var1,0)) * to_number(nvl(il.var2,0)) * to_number(nvl(il.var3,0))/1000000 AS calculated_value