2016-09-26 4 views
0

私はで私にコール時を与える列acdtimeを持っています。これらのフィールドをHH:MMフォーマットに変換する必要があります。間隔「1:05:04」からHH:MM形式への変換Informix 11.50

INTERVAL:

私の考えでは、パラメータとして3904を使用して間隔を秒に変換する最初のものです(0:0:0)HOUR秒+ acdtime

秒単位と私が手TO:

1時05分04秒

次にCこの結果をcharに変換し、部分文字列を作成します。
これは私が固執するところです。
あなたはInformixのの非常に古風なバージョンを持っている場合を除き、多く

+0

「サブストリングにする」とはどういう意味ですか? – Hogan

+0

私が得た結果(1:05:04)をchar(string)に変換できれば、先行する0を連結して01:05:04を取得し、substring()関数を使ってちょうど選択することができます"01:05"は私が必要とするフォーマットです(HH:MM)。よろしく! –

答えて

1

あなたはHHで時間をしたいので:MM形式で、どの程度:

SELECT acdtime, 
     EXTEND(TODAY::DATETIME YEAR TO SECOND + acdtime UNITS SECOND, 
       HOUR TO MINUTE), 
     EXTEND(TODAY::DATETIME YEAR TO SECOND + 
       (TRUNC((acdtime + 59)/60)*60) UNITS SECOND, 
       HOUR TO MINUTE) 
    FROM TheAnonymousTable; 

出力:最初の式が下向き分の端数を切り捨て

0 00:00 00:00 
    59 00:00 00:01 
    60 00:01 00:01 
3904 01:05 01:06 

、0から59までの時間そう秒は0分にマップされます。より多くの場合、「通話時間」は次の大きな分に切り上げられます。 2番目の表現はそれを行います。通話時間が86400秒以上(1日以上)の場合は、この問題が発生することに注意してください。それは修正可能ですが、それは完全に自明ではありません(間違いなく簡潔です)。

1

おかげで、何がしたいことはTO_CHAR()機能ですが、ベース、ない間隔としてDATETIME値が必要になります。

TO_CHAR(TODAY::DATETIME YEAR TO SECOND + 3904 UNITS SECOND, '%H:%M') 

...生成されます。

あなたCOUNを追加することができた DATETIMEはあなたに真夜中を与えるよう TODAYキャスティング
(expression) 01:05 

、 t秒です。もちろん、このメソッドは呼び出しが23:59:59以上続くと仮定していません。その可能性を割り引くことができない場合は、acdtime < 86400をチェックするCASEステートメントで式をラップする必要があります。

関連する問題