将Varchar“时间”转换为时间

时间:2014-07-17 13:34:41

标签: sql sql-server tsql

新软件版本让我重建了大部分报告。新版本使用以下格式varchar(17)将时间存储为DDDD:HH:MM:SS.sss。以前,相同的数据存储在几秒钟内。我需要对存储为varchar的数据执行计算,但经典CONVERT(TIME, *THIS_FIELD*)会导致以下错误:

  

消息241,级别16,状态1,行2转换时转换失败   字符串的日期和/或时间。

我也试过CAST()但没有成功。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以通过将日期与时间部分分开来尝试不同的方法。然后,要在几秒钟内进行变换,您可以将天数乘以86.400(一天中的秒数),并使用时间格式14转换另一部分(请查看日期/时间格式here

假设构建模式如下:

create table Tbl_Timespan (interval varchar(17))
insert into Tbl_Timespan values ('0003:23:12:36.042')

您可以将此列转换为秒:

select 
  interval,
  LEFT(interval,charindex(':',interval)-1)*86400+
  DATEDIFF(second,0,convert(varchar, replace(right(interval, len(interval) -    charindex(':',interval)),'.',':'),14))
from Tbl_Timespan

我没有处理错误,并且使用函数更好。


SQL Fiddle