在大型机上使用 DB2,我有一个值指示作业花费的微秒数,例如26,366,861,945
.
有没有H:MM:SS.mmmmmm
使用标准 DB2 函数将其转换为格式的简单方法?换句话说,上面的值将变为7:19:26.861945
。
如有必要,我们可以删除微秒并接受HH:MM:SS
.
如果超过 24 小时,我不会对显示天数大惊小怪,27:02:14
就可以了。
我虽然关于选择零时间plus xx microseconds
但无法让它工作。
好吧,这绝对是残酷的,但这应该可行:
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
我把它分成几部分,所以应该很容易理解。将字符串转换为整数,将其添加到特定日期(日期真的无关紧要,只要它是本月的第一天),然后使用一些字符串搜索/格式化将其转换为小时而不是天。
尝试这样的事情(我无法测试):
TIMESTAMP_ISO('0000-00-00-00:00:00.000000') + MICROSECOND(DB2_TABLE.DB2_COLUMN)
时间计算DB2 基础:有趣的日期和时间 时间戳函数TIMESTAMP_ISO