【发布时间】:2020-05-19 16:26:57
【问题描述】:
这个问题主要是出于对看似如此简单的事情感到沮丧,我无法开始工作......
我们的 ERP 系统 (Infor XA) 存储日期和时间,例如 1200203145125,即 CYYMMDDHHMMSS。世纪字节为 0 = 19 和 1 = 20。因此“120”(CYY) = 2020 年。该列是数字。对于刷卡工作的工人,我需要测量他们刷卡时间和现在时间之间的经过时间。因此,假设今天早上 5:31 有一个工人刷卡,时间戳可能如下所示:1200203053116(和 16 秒)。我正在使用 CURRENT_TIMESTAMP 作为“现在”时间。
到目前为止,为了得到差异,我在 VARCHAR_FORMAT()、CAST() 和数据类型不匹配错误的海洋中游泳了一天的大部分时间。到目前为止,我得到的最接近的是转换这两个时间 - 滑动时间和 CURRENT_TIMESTAMP 与午夜_秒() 将两个时间都减少到自午夜以来的数字秒数,然后减去两者。这有效,以秒为单位返回两次之间的差异。 (顺便说一句,我从滑动日期 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)) 类型的东西,但这也不起作用。任何建议都会很棒(即使这样做的方式与我一直在尝试的完全不同)。可悲的是,我希望这是我们的 SQL Server 机器上的任务,而不是我们的 ERP 系统。我本可以在 5 分钟内完成。
谢谢!
【问题讨论】:
标签: sql date timestamp db2 mathematical-optimization