1

表 DB2

ID       HOURS        HOURSMINUTES       
1000     480.5        30:30:00

HOURS - HOURSMINUTES を取得したい

ID       HOURS - HOURSMINUTES
1000       450.0

HOURS は HOURS 単位の float 値です。つまり 480.5 時間です。HOURSMINUTES は文字列値: 30:30:00 (30 時間 30 分 00 秒)

減算する方法は?

2 つのテーブルから値を取得しているため、これは完全な式です (この形式で値を取得しますが、減算することはできません)。2 つのタイムスタンプ形式からの減算として、既に HOURS を取得しています。結果は float です。累積時間は文字列値です。

select t1.id,
dec (( timestampdiff(
  4, 
  char(t1.actualfinish - t1.reportdate))/60.00),10,2) as HOURS,t2.cumulativetime as HOURSMINUTES
from t1
join t2 on t2.id=t1.id 

以下にソリューションを挿入しようとすると、エラーが発生します。

    select t1.id,
    dec (( timestampdiff(
      4, 
      char(t1.actualfinish - t1.reportdate))/60.00),10,2) as HOURS,t2.cumulativetime as HOURSMINUTES,

dec (( timestampdiff(
      4, 
      char(t1.actualfinish - t1.reportdate))/60.00),10,2)- cast(substr(t2.cumulativetime, 1, 2) as int) - 
      (cast(substr(t2.cumulativetime, 4, 2) as int) / 60.0) as diff
    from t1
    join t2 on t2.id=t1.id 

Kapilバージョンも試しました:

select t1.id,
    dec (( timestampdiff(
      4, 
      char(t1.actualfinish - t1.reportdate))/60.00),10,2) as HOURS,t2.cumulativetime as HOURSMINUTES,

(dec (( timestampdiff(
  4, 
  char(t1.actualfinish - t1.reportdate))/60.00),10,2) - (CAST(substr(t2.cumulativetime , 1, 2) AS float) + CAST(substr(t2.cumulativetime , 4, 2) AS float)/60 + CAST(substr(t2.cumulativetime , 7, 2) AS float)/3600)) as diff

from t1
    join t2 on t2.id=t1.id 
4

3 に答える 3

1

これを試して:

Select  (HOURS - (CAST(substr(HOURSMINUTES , 1, 2) AS float) + CAST(substr(HOURSMINUTES , 4, 2) AS float)/60 + CAST(substr(HOURSMINUTES , 7, 2) AS float)/3600)) as diff
From table
于 2012-07-12T11:13:18.577 に答える
1

DB2 for z/OS バージョン 9.1 を互換モードで使用するソリューションを次に示します。

select
  t.HRS
  - cast(substr(t.HMS, 1, locate(':', t.HMS) - 1) as FLOAT)
  - (cast(substr(t.HMS, locate(':', t.HMS) + 1, locate(':', t.HMS, locate(':', t.HMS) + 1) - locate(':', t.HMS) - 1) as FLOAT) / 60.0)
  - (cast(substr(t.HMS, locate(':', t.HMS, locate(':', t.HMS, locate(':', t.HMS) + 1)) + 1) as FLOAT) / 3600.0)
from
  (
    select
      cast(480.5 as float) as HRS
      , '333:44:55' as HMS
    from
      sysibm.SYSDUMMY1
  ) as t
with ur for read only;

これにより、 の結果が得られ146.75138888888887ます。

LOCATE_IN_STRING利用可能な場合は、それを使用して文字列:内の n 番目を簡単に見つけることができHMSます。

于 2012-07-12T13:00:06.377 に答える
1
select HOURS - 
       cast(substr(HOURSMINUTES, 1, 2) as int) - 
      (cast(substr(HOURSMINUTES, 4, 2) as int) / 60.0) as diff
于 2012-07-12T11:04:40.163 に答える