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

时间:2018-02-01 09:14:24

标签: sql oracle case

我试图将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"或"空"只为那一排?

2 个答案:

答案 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