我有一个C#程序,它将TimeSpan值记录到SQL Server表的varchar字段中。例如,varchar字段可能具有值“00:12:05.7989790”。如何使用sql从格式化为“HH:MM:SS”的字符串获取秒数
我如何使用SQL代码在SECONDS中获得总值?由于该varchar代表12分5秒,我想要一个将其提取为“725”的SQL语句。
我已经尝试了一些这样的代码:
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
但抱怨“从字符串转换日期和/或时间时,转换失败。”
任何建议将不胜感激。
为什么要在varchar列中存储时间?你有没有考虑过使用“时间”专栏?或者将开始和结束存储为日期时间(您可以始终获得三角洲)? –
此外,(a)你不需要重复'CASE'表达式三次,并且(b)尝试转换为'time(0)'或'datetime2(0)'而不是'datetime'(你也可以许多小数位适合'datetime')。 –
@AaronBertrand - 如果是时间跨度*,我会争辩说,将它存储在“时间”列中是不合适的。 SQL Server的时间跨度没有一个体面的数据类型,我可能会争论一个已经转化为相关最小时间元素(秒或毫秒)的单个计数的整数类型。 –