Как рассчитать разницу между временем, когда данные являются десятичными? - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь вычислить разницу во времени между двумя столбцами, столбцы имеют данные: DECIMAL

Я пытался смешать с:

TIMESTAMPDIFF(16, CHAR(TIMESTAMP('1997-03-01-00.00.00') 
    - TIMESTAMP('1997-02-01-00.00.00')))

, но данные делают этосложный, у кого-нибудь есть идеи, как заставить его работать с DECIMAL?

Мне удалось выполнить преобразование сом-строки и на самом деле получить правильное время с этим кодом, но теперь я пытаюсь вычислить разницу между ними, ноЯ застрял.

cast( substr( right( '00' ||cTime, 4) ,1,2) || ':' ||substr( right( '00'  ||cTime, 4) ,3,2)  as time) as "changeTime", 
cast( substr( right( '00' ||iTime, 4) ,1,2) || ':' || substr( right( '00' ||iTime, 4) ,3,2)  as time) as "inTime"

Это код, между которым я хочу сделать различие,

Я ожидаю вывод:

| 10:27:00 | 10:30:00 | 3 |

Если кому-то нужна дополнительная информация, дайте мне знатьтак что я могу редактировать с дополнительной информацией.Буду признателен за любую помощь.

Версия: 7.3 DB2 на AS400

1 Ответ

0 голосов
/ 03 февраля 2019

За этим стоит простой математический расчет.Если вы сохраняете время в столбце dec (4) в форме ЧЧММ, разница во времени между такими моментами проста:

Во-первых, мы рассчитываем ЧАСЫ и МИНУТЫ из такого значения:

HHx = int (Cx) / 100

MMx = MOD (int (Cx), 100)

Во-вторых, мы рассчитываем разницу в минутах:

DIFF = (HH2 * 60 + MM2) - (HH1 * 60 + MM1)

Наконец, мы рассчитываем разницу в ЧАСАХ и МИНУТАХ:

ЧАСОВ= DIFF / 60

МИНУТЫ = MOD (DIFF, 60)

Пример:

select 
  digits(dec(int(c)/100, 2))||':'||digits(dec(mod(int(c), 100), 2))||':00' as cTime
, digits(dec(int(i)/100, 2))||':'||digits(dec(mod(int(i), 100), 2))||':00' as iTime
,     ((int(i)/100*60 + mod(int(i), 100)) - (int(c)/100*60 + mod(int(c), 100)))/ 60  as hours
, mod(((int(i)/100*60 + mod(int(i), 100)) - (int(c)/100*60 + mod(int(c), 100))), 60) as minutes
from table(values 
  (dec(1027, 4), dec(1030, 4))
, (dec(1027, 4), dec(1126, 4))
, (dec(1027, 4), dec(1128, 4))
) t (c, i)

Результат:

CTIME       ITIME    HOURS MINUTES
--------    -------- ----- -------
10:27:00    10:30:00     0       3
10:27:00    11:26:00     0      59
10:27:00    11:28:00     1       1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...