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

我相信你的TIME价值观不能超过 24 小时......

检查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 回答