Разница между отметкой времени в db2 в формате времени, например, чч: мм: сс - PullRequest
0 голосов
/ 10 мая 2018

Ниже приведен запрос, работающий в хороших базах данных MySQL . mysql> select REQ_NO, Req_CloseDate, Req_WorkStartDate, TIMEDIFF (Req_CloseDate, Req_WorkStartDate) Продолжительность из Request_Master_Table, где 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 для получения того же вывода?

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

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

Вы можете использовать функцию 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'; 

Для ЧЧ: ММ: СС Формат

Получите разницу в СЕКУНД и ДОБАВЬТЕ к времени ('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';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...