如何计算数据为DECIMAL时的时间差?
How to calculate the diffrence between time when the data is DECIMAL?
我正在尝试计算两列之间的时间差,列中有数据:DECIMAL
我试过混合使用:
TIMESTAMPDIFF(16, CHAR(TIMESTAMP('1997-03-01-00.00.00')
- TIMESTAMP('1997-02-01-00.00.00')))
但是数据让它变得复杂,任何人都知道如何让它与 DECIMAL 一起工作?
我设法进行了 som 字符串转换,并且实际上用这段代码得到了正确的时间,但现在我尝试计算它们之间的差异,但我卡住了。
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 |
如果有人需要更多信息,请告诉我,以便我可以使用更多信息进行编辑。任何帮助将不胜感激。
版本:AS400 上的 7.3 DB2
这背后有一个简单的数学计算。
如果将时间以 HHMM 的形式存储在 dec(4) 列中,则这些时间之间的时间差很简单:
首先,我们根据这样的值计算 HOURS 和 MINUTES:
HHx = int(Cx)/100
MMx = MOD(int(Cx), 100)
其次,我们计算以分钟为单位的差异:
DIFF=(HH2*60+MM2) - (HH1*60+MM1)
最后,我们计算 HOURS 和 MINUTES 的差异:
HOURS=DIFF/60
MINUTES=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
我正在尝试计算两列之间的时间差,列中有数据:DECIMAL
我试过混合使用:
TIMESTAMPDIFF(16, CHAR(TIMESTAMP('1997-03-01-00.00.00')
- TIMESTAMP('1997-02-01-00.00.00')))
但是数据让它变得复杂,任何人都知道如何让它与 DECIMAL 一起工作?
我设法进行了 som 字符串转换,并且实际上用这段代码得到了正确的时间,但现在我尝试计算它们之间的差异,但我卡住了。
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 |
如果有人需要更多信息,请告诉我,以便我可以使用更多信息进行编辑。任何帮助将不胜感激。
版本:AS400 上的 7.3 DB2
这背后有一个简单的数学计算。 如果将时间以 HHMM 的形式存储在 dec(4) 列中,则这些时间之间的时间差很简单:
首先,我们根据这样的值计算 HOURS 和 MINUTES:
HHx = int(Cx)/100
MMx = MOD(int(Cx), 100)
其次,我们计算以分钟为单位的差异:
DIFF=(HH2*60+MM2) - (HH1*60+MM1)
最后,我们计算 HOURS 和 MINUTES 的差异:
HOURS=DIFF/60
MINUTES=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