下面是在优良的mysql数据库中工作的查询。mysql>从request_master_表中选择req_no、req_closedate、req_workstartdate、timediff(req_closedate、req_workstartdate)duration,其中req_no='10348';+
ohtdti5x1#
-+
vecaoik12#
但是我无法在db2中获得相同的输出,db2中的查询将是什么?
nzrxty8p3#
您可以使用timestampdiff函数来获得两个时间戳之间的近似差值。使用此链接了解如何使用extract()和julian_day()函数获得准确的结果。使用时间戳:note:- following 对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\u closedate和req\u workstartdate参数的格式
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';
ar7v8xwq4#
-+\124;需求编号需求关闭日期需求工作开始日期持续时间47:40:45+--------+
w6lpcovy5#
i1icjdpr6#
一种解决办法是使用 DAYS() 功能
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小时,您可能需要自己将秒差转换为小时、分钟和秒。e、 g.类似这样的东西(当然可以放入名为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'
或者,如果您使用的是DB2V11.1或更高版本,只需使用 DAYS_BETWEEN() ```select REQ_NO, Req_CloseDate, Req_WorkStartDate, DAYS_BETWEEN(Req_CloseDate, Req_WorkStartDate) AS DurationfromRequest_Master_TablewhereREQ_NO ='10348'
DAYS_BETWEEN()
仅供参考,还介绍了DB2V11.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 DurationfromRequest_Master_TablewhereREQ_NO ='10348'
如果差异可以超过24小时,那么使用这样的东西(然后可以放入一个自定义项…)
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'))fromRequest_Master_TablewhereREQ_NO ='10348'
7rtdyuoh7#
jaxagkaj8#
ep6jt1vc9#
pgccezyw10#
------+
10条答案
按热度按时间ohtdti5x1#
-+
vecaoik12#
但是我无法在db2中获得相同的输出,db2中的查询将是什么?
nzrxty8p3#
您可以使用timestampdiff函数来获得两个时间戳之间的近似差值。
使用此链接了解如何使用extract()和julian_day()函数获得准确的结果。
使用时间戳:
note:- following 对timestampdiff()函数进行了假设
一年有365天
一年有52周
一个月有30天
timestampdiff()的语法:-
使用以下值之一代替n来表示结果的时间单位:
1=分之一秒
2=秒
4=分钟
8=小时
16=天
32=周
64=月
128=四分之一
256=年
假设您想要以天为单位的差异,您修改的查询将是
对于hh:mm:ss格式
获取以秒为单位的差值并将其添加到时间('00:00:00')
按要求修改查询
在转换为时间戳时传递req\u closedate和req\u workstartdate参数的格式
ar7v8xwq4#
-+\124;需求编号需求关闭日期需求工作开始日期持续时间47:40:45+--------+
w6lpcovy5#
-+
i1icjdpr6#
一种解决办法是使用
DAYS()
功能如果您需要覆盖超过24小时,您可能需要自己将秒差转换为小时、分钟和秒。e、 g.类似这样的东西(当然可以放入名为timediff的用户定义函数中)
或者,如果您使用的是DB2V11.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'
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'
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'
7rtdyuoh7#
-+
jaxagkaj8#
-+
ep6jt1vc9#
-+
pgccezyw10#
------+