Одним из решений было бы использование функции 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'