以下是在精细的mysql数据库中工作的查询。 MySQL的>从Request_Master_Table中选择REQ_NO,Req_CloseDate,Req_WorkStartDate,TIMEDIFF(Req_CloseDate,Req_WorkStartDate)持续时间,其中REQ_NO ='10348'; + -------- + --------------------- + ------------------ --- + ---------- + | REQ_NO | Req_CloseDate | Req_WorkStartDate |持续时间| + -------- + --------------------- + ------------------ --- + ---------- + | 10348 | 2017-02-03 05:36:14 | 2017-02-01 05:55:29 | 47:40:45 | + -------- + --------------------- + ------------------ --- + ---------- +
但我无法在db2中获取db2中的查询以获得相同的输出?
答案 0 :(得分:0)
您可以使用TIMESTAMPDIFF函数获取两个时间戳之间的近似差异。
使用此link了解如何使用 EXTRACT()和 JULIAN_DAY()功能获得准确的结果。
使用TIMESTAMPDIFF:
注: - 以下假设是针对 TIMESTAMPDIFF()功能
TIMESTAMPDIFF()的语法: -
timestampdiff (n, char(
timestamp('2018-05-10')-
timestamp('2002-04-10')))
代替 n ,请使用以下值之一来指示结果的时间单位:
假设您希望天数不同,您的修改后的查询将是
select REQ_NO,
Req_CloseDate,
Req_WorkStartDate,
TIMESTAMPDIFF(16,Req_CloseDate,Req_WorkStartDate) Duration
from Request_Master_Table where REQ_NO ='10348';
对于HH:MM:SS格式
获取 SECONDS 的差异,并添加到时间('00:00:00')
根据要求修改查询
传递 Req_CloseDate &的格式 Req_WorkStartDate 转换为TIMESTAMP时的参数
select REQ_NO,Req_CloseDate,
Req_WorkStartDate,time('00:00:00') +
TIMESTAMPDIFF(2,TIMESTAMP_FORMAT(Req_CloseDate,'YYYY-MM-DD-HH.MI.SS.NNNNNN'),TIMESTAMP_FORMAT(Req_WorkStartDate,'YYYY-MM-DD-HH.MI.SS.NNNNNN')) SECONDS Duration
from REQUEST_MASTER_TABLE
where REQ_NO ='10348';
答案 1 :(得分:0)
一种解决方案是使用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'
FYI 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'