表字段的非空非0判断无效

phoenixLotus 2015-12-21 05:31:30
表table_a 里面有个字段 filed_a number类型 可为0,null及其他值。
写了一个sql
select case when filed_a is null then 1 when filed_a=0 then 1 else 1/filed_a end from table_a
但是这个会报除数为0错。
我想请教下各位老师,为什么,不是做了判断么,还会报除数为0呢。
该如何解决这个问题呢。
非常感谢。。
...全文
335 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenglongyi 2015-12-24
  • 打赏
  • 举报
回复
mayanzs 2015-12-24
  • 打赏
  • 举报
回复

select case when filed_a is null then 1 when filed_a=0 end from table_a where filed_a is null or filed_a=0
union all
select 1/filed_a from table_a where nvl(filed_a,0)<>0
wanggang_sql 2015-12-24
  • 打赏
  • 举报
回复
这个没问题呀,不报错的。
phoenixLotus 2015-12-21
  • 打赏
  • 举报
回复
非常感谢版主以及2楼兄弟的回复。 那条数据 我也根据id查出来看过,filed_a确实就是0.以前我经常用也没遇到过这样的问题。 to2楼的兄弟,table_a 肯定就是一个表 filed_a也是这个表的一列,跟我这里写的唯一的区别 可能就是 我那边用了多表关联查询。 也改用decode试过,结果是一样的。。真是第一次遇到。只有再根据版主提供的方法再去抓出来看下了。 太感谢了
卖水果的net 2015-12-21
  • 打赏
  • 举报
回复
这个问题有些怪。 感觉 table_a ,不是一张表,而是一张视图,并且 filed_a 是一个计算列。
小灰狼W 2015-12-21
  • 打赏
  • 举报
回复
把那条数据抓出来看看 DECLARE v_num NUMBER; BEGIN FOR x IN(SELECT t.*,t.rowid rid FROM table_a t)LOOP BEGIN SELECT CASE WHEN filed_a IS NULL THEN 1 WHEN filed_a=0 THEN 1 ELSE 1/filed_a END INTO v_num FROM table_a WHERE ROWID=x.rid; EXCEPTION WHEN ZERO_DIVIDE THEN dbms_output.put_line('就是它了: '||x.filed_a||'; rowid '||ROWIDTOCHAR(x.rid)); WHEN OTHERS THEN dbms_output.put_line(SQLERRM); END; END LOOP; END;

17,137

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧