我尝试对以下内容使用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语句的查询?在case语句中,如果等式的结果没有返回有效的数字,或者如果var1 | var2| var3不是整数,则仅将该行的calculated_value设置为"0“或"Empty”?
发布于 2018-02-01 17:22:12
尝试检查这些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 ...发布于 2018-02-01 17:27:09
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_valuehttps://stackoverflow.com/questions/48559047
复制相似问题