1

私はdecimal時間があって、に変換することができtimeます。timeただし、データ型の列を持つテーブルに変換された時間を挿入する必要があります

DECLARE @hours decimal(15,4)
SELECT @hours = 20.5 //20 Hrs and 30 mins

SELECT    
    RIGHT('00' + CONVERT(varchar(2), FLOOR(@hours)), 2) + ':' +
    RIGHT('00' + CONVERT(varchar(2), FLOOR(((@hours - FLOOR(@hours)) * 60))), 2) + ':' +
    RIGHT('00' + CONVERT(varchar(2), FLOOR(((@hours - FLOOR(@hours)) * 60) - FLOOR(((@hours - FLOOR(@hours)) * 60))) * 60), 2) AS Time

これは、値を挿入する必要がある一時テーブルです。

create table #timetest(timetest time)

insert into #timetest
  SELECT    
      RIGHT('00' + CONVERT(varchar(2), FLOOR(@hours)), 2) + ':' +
      RIGHT('00' + CONVERT(varchar(2), FLOOR(((@hours - FLOOR(@hours)) * 60))), 2) + ':'   +
      RIGHT('00' + CONVERT(varchar(2), FLOOR(((@hours - FLOOR(@hours)) * 60) - FLOOR(((@hours - FLOOR(@hours)) * 60))) * 60), 2) 

次のエラーが表示されます。

文字列から日時を変換する際に変換に失敗しました。

私を助けてください

4

2 に答える 2

3

TIME24時間以上値を持つことはできないと思います....

次のMSDN ドキュメントをTIME確認してください。

範囲 00:00:00.0000000 ~ 23:59:59.9999999

更新:時間を 24 時間未満に変更した場合は、次のように挿入できます。

create table #timetest(timetest time)

insert into #timetest(timetest)
  SELECT     
     CAST(RIGHT('00' + CONVERT(varchar(2), FLOOR(@hours)), 2) + ':' +
          RIGHT('00' + CONVERT(varchar(2), FLOOR(((@hours - FLOOR(@hours)) * 60))), 2) + ':'   +
          RIGHT('00' + CONVERT(varchar(2), FLOOR(((@hours - FLOOR(@hours)) * 60) - FLOOR(((@hours - FLOOR(@hours)) * 60))) * 60), 2) AS TIME)

CAST文字列を明示的に指定する必要がAS TIMEあり、すべてが正常に機能するはずです。

于 2012-07-27T09:53:50.663 に答える
0
declare @hours decimal(15,4)

set @hours = 20.5 --20 Hrs and 30 mins

create table #timetest(timetest time(0))

insert into #timetest(timetest) values(cast(@hours/24 as datetime))

select * from #timetest

drop table #timetest

結果:

20:30:00
于 2012-07-27T10:14:07.393 に答える