sql - 在 DB2 中用午夜秒四舍五入
问题描述
也许这比我意识到的更简单,但我试图简单地查看下面的记录并将时间戳相加,但对于差异仅以秒为单位的分组,我的结果集是 0 但我想以小数形式计算秒数。
我在 AS400 iSeries 版本 7 上使用 DB2
样本数据
JOB_STATUS | JOB_STATUS_TIME
---------------------------------------------
P 2019-10-02 08:47:12.362261
P 2019-10-02 08:47:22.362261
P 2019-10-02 08:47:32.362261
P 2019-10-02 08:47:42.362261
P 2019-10-02 08:47:52.362261
询问:
SELECT
SUM
(
CASE A1.JOB_STATUS WHEN 'P' THEN
(DAYS(A2.JOB_STATUS_TIME) - DAYS(A1.JOB_STATUS_TIME)) * 86400
+ MIDNIGHT_SECONDS(A2.JOB_STATUS_TIME) -
MIDNIGHT_SECONDS(A2.JOB_STATUS_TIME)
END
) / 60 AS ACTIVE_MINUTES
FROM SCHEMA.TABLE;
我尝试添加ROUND({sum query}, 2)
,但这对我不起作用,仍然返回零
解决方案
如果除法运算中使用的所有列和值都是INGEGER
(或BIGINT
或SMALLINT
),则除法将是整数除法。
您需要将某些内容转换为 DECIMAL 或使用 DECFLOAT 值的十进制浮点数来获得十进制除法。例如尝试除以60.0
SELECT
SUM(CASE A1.JOB_STATUS WHEN 'P' THEN
(DAYS(A2.JOB_STATUS_TIME) - DAYS(A1.JOB_STATUS_TIME)) * 86400
+ MIDNIGHT_SECONDS(A2.JOB_STATUS_TIME)
- MIDNIGHT_SECONDS(A1.JOB_STATUS_TIME)
END
) / 60.0 AS ACTIVE_MINUTES
FROM
SCHEMA.TABLE
https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_72/db2/rbafz2intoper.htm
如果算术运算符的两个操作数都是小数位数为零的整数,则运算以二进制执行,结果是一个大整数,除非其中一个(或两个)操作数都是大整数,在这种情况下,结果是一个大整数。除法的任何余数都将丢失
推荐阅读
- ruby-on-rails - 如何获取模型中图像变体的 url(在控制器/视图之外)?主动存储
- javascript - 如何在 dc.js 中创建瀑布图
- apache-karaf - JBDS 11.3.0.GA - Fuse 生成的项目不起作用
- vue.js - 编译单个文件 vue.js 组件(*.vue):名称有问题(默认为 app.js)
- sonarqube - 我们在哪里可以获得 sonarqube 服务器版本的帮助页面以及内部版本号?
- java - 如何在 Java 中访问对象数组中的数据?
- r - httr post中的json数组
- android - 使用 JSON 解析用户数据
- swift - Moya:出现 -999(中止)错误
- symfony - webpack-require-http webpack encore symfony - 需要外部 js