如何使用sql从格式化为" HH:MM:SS"

时间:2016-09-15 00:20:24

标签: sql-server

我有一个C#程序,它将TimeSpan值记录到SQL Server表的varchar字段中。例如,varchar字段的值可能为" 00:12:05.7989790"。

我如何使用SQL代码在SECONDS中获取总值?由于该varchar代表12分5秒,我想要一个SQL语句将其提取为" 725"。

我尝试过这样的代码:

select
   Case when IsDate(the_value)=1 then datepart(HOUR, CONVERT(datetime, the_value))*360 else 0 end
        + Case when IsDate(the_value)=1 then datepart(MINUTE, CONVERT(datetime, the_value))*60 else 0 end
        + Case when IsDate(the_value)=1 then datepart(SECOND, CONVERT(datetime, the_value))*1 else 0 end
from mytable

但它抱怨"从字符串转换日期和/或时间时转换失败。"

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:0)

DATEDIFF功能

https://msdn.microsoft.com/en-AU/library/ms189794.aspx

DATEDIFF(ss,'00:00:00.000',[您的时间栏])

答案 1 :(得分:0)

我会使用datediff()并使用显式转换为时间:

select datediff(second, '00:00:00', convert(time, the_value))

如果单位可能超过23小时,那么您将遇到挑战,因为转换将失败。在这种情况下,字符串操作是一个选项:

select (left(the_value, 2) * 60 * 60 + 
        substring(the_value, 3, 2) * 60 + 
        substring(the_value, 5, 2)
       ) as seconds

这假设所有字符串都是正确的格式。您可以使用case

对此进行验证
select (case when the_value like '[0-9]0-9]:[0-9[0-9]:[0-9][0-9]%'
             then (left(the_value, 2) * 60 * 60 + 
                   substring(the_value, 3, 2) * 60 + 
                   substring(the_value, 5, 2)
                  )
         end) as seconds