我有一个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
但它抱怨"从字符串转换日期和/或时间时转换失败。"
任何建议都将不胜感激。
答案 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