我有一个应用程序,它记录自午夜以来执行操作的时间(以毫秒为单位),并将其存储在Db2 10.5数据库表中。我需要将该图转换为人类可读的时间戳输出。
SELECT ACTION_NAME,
ACTION_TIME
FROM ACT.ACTIONS
ALARM1 1818000
ALARM2 76500000
我希望能够运行SELECT,但是返回的值就像
ALARM1 05:03
ALARM2 21:15
任何指导将不胜感激。
答案 0 :(得分:1)
您可以将秒数添加到“午夜”:
SELECT action_name, time '00:00' + (action_time/1000) second as action_time
FROM actions;
Online example(基于DB2 11.1)
答案 1 :(得分:0)
Db2中有一种TIME
类型:
TIME函数从一个值返回一个时间。
所以我们可以使用它。
我们仍然需要DATE
,TIME
或TIMESTAMP
作为输入,而不是INT
。因此,让我们尝试使用TIMESTAMP。我们可以这样获取当前日期的时间戳;
db2 "values timestamp(current date)"
1
-------------------
2019-08-23-00.00.00
1 record(s) selected.
现在,我们可以简单地以秒或微秒为单位添加偏移量。例如。 76500000:
db2 "values timestamp(current date) + (76500000/1000) seconds"
1
-------------------
2019-08-23-21.15.00
1 record(s) selected.
随时间推移:
db2 "values time(timestamp(current date) + (76500000/1000) seconds)"
1
--------
21:15:00
我们的数据:
db2 "create table ACT.ACTIONS(action_name varchar(10), action_time int)"
db2 "insert into ACT.ACTIONS values ('ALARM1',1818000)"
db2 "insert into ACT.ACTIONS values ('ALARM2',76500000)"
db2 "select action_name, time( timestamp(current date) + (action_time/1000) seconds) as time from act.actions"
ACTION_NAME TIME
----------- --------
ALARM1 00:30:18
ALARM2 21:15:00
2 record(s) selected.
(请注意,您的示例中可能有一个错误)
编辑: 如前所述,不需要使用CURRENT TIMESTAMP,我没有注意到我们可以使用时间的STRING表示形式,即将'00:00'用作显示的@a_horse_with_no_name:
db2 "select action_name, time('00:00') + (action_time/1000) seconds as action_time_fmt from act.actions"
ACTION_NAME ACTION_TIME_FMT
----------- ---------------
ALARM1 00:30:18
ALARM2 21:15:00
2 record(s) selected.
答案 2 :(得分:0)
如果需要毫秒部分,可以执行例如
values timestamp('0001-01-01') + (1818005 / 1000) seconds + (mod(1818005,1000)*1000) microseconds"
1
--------------------------
0001-01-01-00.30.18.005000
1 record(s) selected.