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 に答える