在大型机上使用DB2,我有一个值,表示作业所用的微秒数,比如26,366,861,945
。
有没有简单的方法可以使用标准DB2函数将其转换为H:MM:SS.mmmmmm
格式?换句话说,上面的值将变为7:19:26.861945
。
如有必要,我们可以删除微秒并接受HH:MM:SS
。
如果超过24小时,我不会对显示日期表示不满,27:02:14
会没事的。
我虽然选择了零时间plus xx microseconds
,但无法让它发挥作用。
答案 0 :(得分:2)
嗯,这绝对是残暴的,但这应该有效:
WITH
ORIG (TS) AS (
SELECT BIGINT(REPLACE('26,366,861,945', ',', ''))
FROM SYSIBM.SYSDUMMY1
),
CONV (TS) AS (
SELECT TIMESTAMP_ISO('0001-01-01') + (SELECT TS FROM ORIG) MICROSECOND
FROM SYSIBM.SYSDUMMY1
),
FMT (TS) AS (
SELECT VARCHAR_FORMAT(TS, 'DD-HH24:MI:SS.FF')
FROM CONV
),
DAYLOC (D) AS (
SELECT LOCATE('-', TS)-1
FROM FMT
),
HOURLOC (H) AS (
SELECT LOCATE(':', TS, (SELECT D FROM DAYLOC))-1
FROM FMT
),
DY (D) AS (
SELECT CAST(SUBSTR(TS, 1, LOCATE('-', TS)-1) AS INTEGER)-1
FROM FMT
),
HOURS (H) AS (
SELECT CAST(SUBSTR(TS, (SELECT D FROM DAYLOC)+2, 2) AS INTEGER)
FROM FMT
)
SELECT
RTRIM(CHAR(((SELECT D FROM DY) * 24) + (SELECT H FROM HOURS))) ||
SUBSTR(TS, (SELECT H FROM HOURLOC) +1)
FROM FMT
我把它分成几部分,所以应该很容易理解。将字符串转换为整数,将其添加到特定日期(日期确实无关紧要,只要它是本月的第一天),然后使用一些字符串搜索/格式将其转换为小时而不是几天。
答案 1 :(得分:0)
尝试这样的事情(我无法测试):
TIMESTAMP_ISO('0000-00-00-00:00:00.000000') + MICROSECOND(DB2_TABLE.DB2_COLUMN)