首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用case处理SELECT语句中的空值或NULL值

问使用case处理SELECT语句中的空值或NULL值
EN

Stack Overflow用户
提问于 2018-02-01 17:14:24
回答 2查看 59关注 0票数 0

我尝试对以下内容使用Case语句

代码语言:javascript
复制
 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”?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-01 17:22:12

尝试检查这些VARx是否真的是数字。例如:

代码语言:javascript
复制
from ...
where regexp_like(il.var1, '^\d+$')
  and regexp_like(il.var2, '^\d+$')
  and regexp_like(il.var3, '^\d+$')

编辑啊哈,你还是想得到一些结果。

然后你可以这样使用:如果VARx不是一个数字,使用" 0“(零),最终结果将是0。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2018-02-01 17:27:09

代码语言:javascript
复制
  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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48559047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档