mysql - db2 中时间戳之间的差异,时间格式如 hh :mm:ss

标签 mysql db2

下面是在良好的 mysql 数据库中运行的查询。 mysql> 从 Request_Master_Table 中选择 REQ_NO、Req_CloseDate、Req_WorkStartDate、TIMEDIFF(Req_CloseDate、Req_WorkStartDate) 持续时间,其中 REQ_NO ='10348'; +--------+---------------------+------------------ ---+----------+ |请求号 |请求_关闭日期 | Req_WorkStartDate |持续时间 | +--------+---------------------+------------------ ---+----------+ | 10348 | 2017-02-03 05:36:14 | 2017-02-01 05:55:29 | 47:40:45 | 47:40:45 +--------+---------------------+------------------ ---+----------+

但是我无法在 db2 中获取相同输出的 db2 查询是什么?

最佳答案

一种解决方案是使用 DAYS() 函数

select  REQ_NO
,       Req_CloseDate
,       Req_WorkStartDate
,       DAYS(Req_CloseDate) - DAYS(Req_WorkStartDate) AS Duration 
from
    Request_Master_Table
where
    REQ_NO ='10348'

如果您需要覆盖超过 24 小时,您可能需要自己将秒差转换为小时、分钟和秒。例如。像这样的东西(你当然可以将其放入名为 TIMEDIFF 的用户定义函数中)

select REQ_NO
,       Req_CloseDate
,       Req_WorkStartDate
,                  HOURS_BETWEEN  (Req_CloseDate, Req_WorkStartDate)      || ':'
        || TRIM(TO_CHAR(ABS(MOD(MINUTES_BETWEEN(Req_CloseDate, Req_WorkStartDate),60)),'00')) || ':'
        || TRIM(TO_CHAR(ABS(MOD(SECONDS_BETWEEN(Req_CloseDate, Req_WorkStartDate),60)),'00'))
from
    Request_Master_Table
where
    REQ_NO ='10348'

或者,如果您使用的是 Db2 V11.1 或更高版本,只需使用 DAYS_BETWEEN()

select REQ_NO
,       Req_CloseDate
,       Req_WorkStartDate
,       DAYS_BETWEEN(Req_CloseDate, Req_WorkStartDate) AS Duration
from
    Request_Master_Table
where
    REQ_NO ='10348'

仅供引用,Db2 V11.1 还引入了 SECONDS_BETWEEN()MINUTES_BETWEEN()HOURS_BETWEEN()WEEKS_BETWEEN()YEARS_BETWEEN() 以及其他新的内置函数增强了功能以及与其他关系数据库管理系统的兼容性。 https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/com.ibm.db2.luw.wn.doc/doc/c0054107.html

如果时间值之间的差异小于 24 小时,则将以 TIME 数据类型返回差异。

select REQ_NO
,       Req_CloseDate
,       Req_WorkStartDate
,       TIME('00.00.00') + ABS(SECONDS_BETWEEN(Req_CloseDate, Req_WorkStartDate)) SECONDS AS Duration
from
    Request_Master_Table
where
    REQ_NO ='10348'

如果差异可能超过 24 小时,则使用类似的内容(然后您可以将其放入 UDF 中..)

select REQ_NO
,       Req_CloseDate
,       Req_WorkStartDate
,                               HOURS_BETWEEN  (Req_CloseDate, Req_WorkStartDate)      || ':'
        || TRIM(TO_CHAR(ABS(MOD(MINUTES_BETWEEN(Req_CloseDate, Req_WorkStartDate),60)),'00')) || ':'
        || TRIM(TO_CHAR(ABS(MOD(SECONDS_BETWEEN(Req_CloseDate, Req_WorkStartDate),60)),'00'))
from
    Request_Master_Table
where
    REQ_NO ='10348'

关于mysql - db2 中时间戳之间的差异,时间格式如 hh :mm:ss,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50264734/

相关文章:

php - 具有多个 AND/OR 的 Yii 条件 - 运算符优先级

mysql - 如何在mysql中获取以毫秒或微秒为单位的加载时间

sql - 如何在 IBM DB2 中将 SELECT 放入触发器中

indexing - 不区分大小写的 DB2 UNIQUE 约束

php - 使用带有照片哈希密码的 Bcrypt 不起作用

c++ - 我应该使用 shared_ptr 还是返回 unique_ptr.get()?

Python Pandas - 使用 to_sql 以 block 的形式写入大数据帧

sql - 为什么在缩小列和仅获取第一行时会产生不同的结果?

db2 - 相当于 DB2 的 LIMIT

c - 在 DB2 上构建 UDF