1

在大型机上使用 DB2,我有一个值指示作业花费的微秒数,例如26,366,861,945.

有没有H:MM:SS.mmmmmm使用标准 DB2 函数将其转换为格式的简单方法?换句话说,上面的值将变为7:19:26.861945

如有必要,我们可以删除微秒并接受HH:MM:SS.

如果超过 24 小时,我不会对显示天数大惊小怪,27:02:14就可以了。

我虽然关于选择零时间plus xx microseconds但无法让它工作。

4

2 回答 2

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

我把它分成几部分,所以应该很容易理解。将字符串转换为整数,将其添加到特定日期(日期真的无关紧要,只要它是本月的第一天),然后使用一些字符串搜索/格式化将其转换为小时而不是天。

于 2012-11-09T19:39:29.590 回答
0

尝试这样的事情(我无法测试):

TIMESTAMP_ISO('0000-00-00-00:00:00.000000') + MICROSECOND(DB2_TABLE.DB2_COLUMN)

时间计算DB2 基础:有趣的日期和时间 时间戳函数TIMESTAMP_ISO

于 2012-11-10T18:42:55.130 回答