0

DB2にテーブルがあります

id     HOURS     HOURSMINUTESECECONDS
1000   450.5     30:30:30

時間は浮動小数点値で、HOURSMINUTESSECONDS は文字列値です

この関数を使用してそれらを減算します。

    (HOURS - 
(CAST(substr(HOURSMINUTESSECONDS , 1, 2) AS float) +
 CAST(substr(HOURSMINUTESECONDS , 4, 2) AS float)/60 + 
CAST(substr(HOURSMINUTESECONDS , 7, 2) AS float)/3600)) as diff

しかし、HOURSMINUTESECONDS の行に 300:30:30 や 3000:30:30 などの値がある場合、部分文字列は最初の要素のみを取るため、これは機能しません (エラー)。

では、これをどのように解決できますか (SPLIT?) ? ":" の間の完全な値を取得するには、何文字まで使用できますか? ありがとうございました

4

2 に答える 2

1
  • use LOCATE(文字列内の部分文字列の出現のインデックスを示します)
  • または、文字列の末尾に相対的なコロンを参照します。

(HOURS - (CAST(substr(HOURSMINUTESSECONDS , 1, LENGTH(HOURSMINUTESSECONDS) - 6) AS float) + CAST(substr(HOURSMINUTESECONDS , LENGTH(HOURSMINUTESSECONDS) - 4, 2) AS float)/60 + CAST(substr(HOURSMINUTESECONDS , LENGTH(HOURSMINUTESSECONDS) - 1, 2) AS float)/3600)) as diff

于 2012-07-12T12:35:12.983 に答える
0

MOD機能は使えますか?

select 
    (hoursminutesseconds mod 10000) +
    ((hoursminutesseconds/100) mod 100)/60 +
    (hoursminutesseconds mod 100)*3600 
from
(
select replace(hoursminutesseconds,':','') as hoursminutesseconds from table
) as t
于 2012-07-12T12:34:03.937 に答える