mysql—db2中时间戳在时间格式上的差异,如hh:mm:ss

o2g1uqev  于 2021-06-25  发布在  Mysql
关注(0)|答案(10)|浏览(414)

下面是在优良的mysql数据库中工作的查询。mysql>从request_master_表中选择req_no、req_closedate、req_workstartdate、timediff(req_closedate、req_workstartdate)duration,其中req_no='10348';+

vecaoik1

vecaoik12#

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

nzrxty8p

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';
ar7v8xwq

ar7v8xwq4#

-+\124;需求编号需求关闭日期需求工作开始日期持续时间47:40:45+--------+

i1icjdpr

i1icjdpr6#

一种解决办法是使用 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 Duration
from
Request_Master_Table
where
REQ_NO ='10348'

仅供参考,还介绍了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 Duration
from
Request_Master_Table
where
REQ_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'))
from
Request_Master_Table
where
REQ_NO ='10348'

相关问题