数据库number类型数据case when 比较时的,小心机

举报
他们叫我技术总监 发表于 2024/11/02 19:01:52 2024/11/02
【摘要】 前言:        当我们因为前端老是改显示数据,而对应显示名称需要重新赋值,比如数据库表t1存了字段,ID,name其中ID是number类型的字段的。类似这样存储在数据表中。一、case when 字段重新赋值                其中t1是枚举表,为了规范显示名称,需要将显示值固定显示,因此使用case when 重新赋值。代码:select ID, SHOWVALUE,c...

前言:


        当我们因为前端老是改显示数据,而对应显示名称需要重新赋值,比如数据库表t1存了字段,ID,name其中ID是number类型的字段的。类似这样存储在数据表中。

一、case when 字段重新赋值  

     
         其中t1是枚举表,为了规范显示名称,需要将显示值固定显示,因此使用case when 重新赋值。

代码:

select ID, SHOWVALUE,case when ID=-8.56664992678128E18  then '工伤'
  when  ID=-8.56628104882145E18 then '盐湖'
when  ID=-8.56575376810264E18 then '乌尔禾'    
end name from  BI.Oa_Mjb  


效果:


 解析:
        直接用来比较发现name字段无法带出来值。考虑是不是科学计数法的影响。那我们再试试。

二、第二种办法


代码:

select ID/1E18 ID, SHOWVALUE,case when ID/1E18=-8.56664992678128  then '工伤'
  when  ID/1E18=-8.56628104882145 then '盐湖'
when  ID/1E18=-8.56575376810264 then '乌尔禾'  
  end name from  BI.Oa_Mjb  


效果:


解析:
        哦豁,发现还是不行哦,BBQ了呀。那我们是不是把它转换为字符串比较吧。

三、第三中办法


代码:

select to_char(ID) ID, SHOWVALUE,case when to_char(ID)='-8566649926781284405'  then '工伤'
  when  to_char(ID)='-8566281048821445944' then '盐湖'
when  to_char(ID)='-8565753768102639719' then '乌尔禾'    end name from  BI.Oa_Mjb  


效果:


解析:
        统一为char类型后就能带出了,因此我们在使用number类型的数据时,记得转换类型后再比较。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。