Этот вопрос в основном из-за разочарования по поводу чего-то, что кажется таким простым, и я не могу приступить к работе ...
Наша ERP-система (Infor XA) хранит дату и время, как это 1200203145125, что просто CYYMMDDHHMMSS. Байт века равен 0 = 19 и 1 = 20. Таким образом, «120» (CYY) = 2020 год. Столбец имеет номер c. Для работников, которые занимаются поиском работы, мне нужно измерить прошедшее время между их временем работы и временем прямо сейчас. Допустим, сегодня в 5:31 рабочего ударили, отметка времени может выглядеть следующим образом: 1200203053116 (и 16 секунд). И я использую CURRENT_TIMESTAMP для времени "прямо сейчас".
До сих пор, пытаясь вычесть разницу, я плавал в океане VARCHAR_FORMAT (), CAST () и данных ошибки несоответствия типов в течение большей части дня. Самое близкое, что я получил до сих пор, - это преобразование обоих раз - времени пролистывания и CURRENT_TIMESTAMP с помощью midnight_seconds (), уменьшающей оба раза до числовых секунд с полуночи, а затем вычитая их. Это работает, возвращая разницу между двумя разами в секундах. (между прочим, я сократил начальный байт века с даты удара TRNDT)
--difference in hours (now)
(midnight_seconds(CURRENT_TIMESTAMP)) - (midnight_seconds('20' || SUBSTR(ALLMOTRAN.TRNDT,2,2) || '-' ||
SUBSTR(ALLMOTRAN.TRNDT,4,2) || '-' || SUBSTR(ALLMOTRAN.TRNDT,6,2) || ' ' || SUBSTR(ALLMOTRAN.TTIME,1,2) || ':' ||
SUBSTR(ALLMOTRAN.TTIME,3,2) || ':' || SUBSTR(ALLMOTRAN.TTIME,5,2))) AS UNPOSTHRS
Так ... здорово, кажется достаточно легко. Но мне нужен мой ответ в десятичных часах. Когда я пытаюсь разделить вышеприведенное на 3600, я получаю только целочисленный ответ.
--difference in hours (now)
(midnight_seconds(CURRENT_TIMESTAMP)) - (midnight_seconds('20' || SUBSTR(ALLMOTRAN.TRNDT,2,2) || '-' ||
SUBSTR(ALLMOTRAN.TRNDT,4,2) || '-' || SUBSTR(ALLMOTRAN.TRNDT,6,2) || ' ' || SUBSTR(ALLMOTRAN.TTIME,1,2) || ':' ||
SUBSTR(ALLMOTRAN.TTIME,3,2) || ':' || SUBSTR(ALLMOTRAN.TTIME,5,2)))/3600 AS UNPOSTHRS
Я пробовал несколько типов CAST (xxxxx AS DECIMAL (4,2)), но это тоже не работает. Любые предложения были бы хорошими (даже делая это совершенно другим способом, чем я пытался). К сожалению, я sh это была задача на нашем SQL сервере вместо нашей системы ERP. Я мог бы сделать это за 5 минут.
Спасибо!