[英]Handling empty or null values In SELECT statement using case
我正在尝试将Case Statement用于以下内容
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不是整数,仅针对该行将计算值设置为“ 0”还是“空”?
尝试检查那些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 ...
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.