下面是在精细的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 中获取什么查询以获得相同的输出?
一种解决方案是使用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'
您可以使用 TIMESTAMPDIFF 函数来获取两个时间戳之间的近似差值。
使用此链接了解如何使用EXTRACT(( 和JULIAN_DAY((函数获得准确的结果。
使用 TIMESTAMPDIFF :
注意:-对TIMESTAMPDIFF((函数进行了以下假设
- 一年有365天
- 一年有 52 周
- 一个月有 30 天
TIMESTAMPDIFF((的语法:-
timestampdiff (n, char(
timestamp('2018-05-10')-
timestamp('2002-04-10')))
代替n,使用以下值之一来指示结果的时间单位:
- 1 = 秒的小数部分
- 2 = 秒
- 4 = 分钟
- 8 = 小时
- 16 = 天
- 32 = 周
- 64 = 月
- 128 = 季度
- 256 = 年
假设您想要以天为单位的差异,则修改后的查询将是
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 格式
获取以秒为单位的差异并添加到时间('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';