免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5047 | 回复: 2
打印 上一主题 下一主题

sybaseiq15.4 求被除数莫名出错 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-10-11 09:15 |只看该作者 |倒序浏览
本帖最后由 yso 于 2014-10-11 09:15 编辑

     求教各位高人在我的sybaseiq15.4环境下对下面的表数据:

CREATE TABLE ST_FLOW  (
        A                    int NULL,
        B              int NULL,
        R999021               numeric(71,23) NULL,
        R999003               numeric(44,0) NULL,
        R999022               numeric(44,0) NULL,
        R999021_L             numeric(71,23) NULL,
        CUR_STIME_COUNT        bigint NULL
        );
INSERT INTO ST_FLOW(A, B, R999021, R999003, R999022, R999021_L, CUR_STIME_COUNT)
  VALUES(0, 0, 0, 1410, 0, 0, 1);
INSERT INTO ST_FLOW(A, B, R999021, R999003, R999022, R999021_L, CUR_STIME_COUNT)
  VALUES(1, 1, 0, 0, 0, 0, 1);
INSERT INTO ST_FLOW(A, B, R999021, R999003, R999022, R999021_L, CUR_STIME_COUNT)
  VALUES(2, 2, 0, 16, 0, 0, 1);
INSERT INTO ST_FLOW(A, B, R999021, R999003, R999022, R999021_L, CUR_STIME_COUNT)
  VALUES(3, 3, 0, 16, 0, 0, 1);
INSERT INTO ST_FLOW(A, B, R999021, R999003, R999022, R999021_L, CUR_STIME_COUNT)
  VALUES(4, 4, 0, 0, 0, 0, 1);


执行下面的sql:

SELECT
        TAA.A,
        TAA.B,
        TAA.R999021,
        TAA.R999003,
        TAA.R999022,
        TAA.R999021_L,
        CASE  WHEN TAA.R999021_L = 0 THEN 100
                  ELSE round(((TAA.R999021 - TAA.R999021_L) * 1.0 /TAA.R999021_L) * 100,3) END as R999021_LR
FROM
        ST_FLOW TAA
WHERE
        CUR_STIME_COUNT = 1
ORDER BY
        R999003 DESC


R999021_LR 这个列返回的都是莫名的(err),这个是什么原因造成的?

论坛徽章:
6
水瓶座
日期:2014-06-04 03:34:37水瓶座
日期:2014-06-17 13:20:31数据库技术版块每日发帖之星
日期:2016-07-09 06:20:00数据库技术版块每日发帖之星
日期:2016-07-17 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
2 [报告]
发表于 2014-10-12 18:18 |只看该作者
除以0了。
对于numeric(71,23) 来说, 你的case条件应该使用: CASE  WHEN TAA.R999021_L = 0.0 THEN 100

论坛徽章:
0
3 [报告]
发表于 2014-10-13 15:41 |只看该作者
问题清楚了,这个觉得会是sybaseiq15.4的一个bug;我上面的表格实际是一个临时表,是由一堆查询sql得到的数据,然后再由上面的sql做一次汇总计算,这个临时表的列的类型和长度是工具自动导出生成的;发现对于 numeric(71,23)这种超大长度的类型【实际临时sql计算的列没有这么大】,sybaseiq做计算会有问题,只能cast为double就ok了;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP