SUM COLUMN STRING LIKE DATE-Oracle


1

私のTIME_AVG列はOracleのSTRINGです。SUM(TIME_AVG)をDATEに合計する必要がありますが、DATE列は23:59:59までしか受け付けません。

TIME_AVG
42:12:57
null
98:31:06
20:16:12
04:00:31
05:18:39
05:18:06
50:09:12
22:59:27

回答:


0

DATE24時間を超える時間値を持つデータ型に値を書き込むことはできません。1日を超える可能性がある期間を保存する場合は、INTERVALデータ型を使用する必要があります。

あなたがネイティブにまとめることができないとして、INTERVALオラクルではデータ型を、私は、各レコードの合計秒を加算して、として戻って提示する前に、各レコードにこの値を加算し、その時間、分、秒の中に文字列を打破するでしょうINTERVAL

SELECT
    NUMTODSINTERVAL(SUM((TO_NUMBER(SUBSTR(TIME_AVG,1,2))*3600)+(TO_NUMBER(SUBSTR(TIME_AVG,4,2))*60)+TO_NUMBER(SUBSTR(TIME_AVG,7,2))), 'second')
FROM table
WHERE TIME_AVG IS NOT NULL

質問で指定された値の場合、これは10日、8時間、46分、10秒になります。

+000000010 08:46:10.000000000

元のデータからhh:mm:ssプレゼンテーションを完全に再現する場合は、次のようにします。

SELECT    
    TO_CHAR(FLOOR(SUM((TO_NUMBER(SUBSTR(TIME_AVG,1,2))*3600)+(TO_NUMBER(SUBSTR(TIME_AVG,4,2))*60)+TO_NUMBER(SUBSTR(TIME_AVG,7,2)))/3600)) || ':' ||
    TO_CHAR(FLOOR(MOD(SUM((TO_NUMBER(SUBSTR(TIME_AVG,1,2))*3600)+(TO_NUMBER(SUBSTR(TIME_AVG,4,2))*60)+TO_NUMBER(SUBSTR(TIME_AVG,7,2))),3600)/60)) || ':' ||
    TO_CHAR(MOD(SUM((TO_NUMBER(SUBSTR(TIME_AVG,1,2))*3600)+(TO_NUMBER(SUBSTR(TIME_AVG,4,2))*60)+TO_NUMBER(SUBSTR(TIME_AVG,7,2))),60))
FROM table
WHERE TIME_AVG IS NOT NULL

出力が得られます:

248:46:10

本当に、本当に、本当にDATEフィールドに結果を保存する必要がある場合、エポック(1970-01-01)に関連して結果を保存できると思います。

SELECT
    TO_CHAR(TO_DATE('1-1-1970 00:00:00','DD-MM-YYYY HH24:Mi:SS') + (SUM((TO_NUMBER(SUBSTR(TIME_AVG,1,2))*3600)+(TO_NUMBER(SUBSTR(TIME_AVG,4,2))*60)+TO_NUMBER(SUBSTR(TIME_AVG,7,2)))/86400), 'YYYY-MM-DD HH24:Mi:SS')
FROM table
WHERE TIME_AVG IS NOT NULL

出力が得られます:

1970-01-11 08:46:10
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.