繁体   English   中英

使用大小写在SELECT语句中处理空值或空值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM