我有一个数据库,其中时间存储为 NVARCHAR(14)
。当我查询特定用户的时间时,我看到的示例是 00:08:45.68。
我想要做的是将0小时8分45秒68毫秒的值转换为526秒的值。大于或等于 50 毫秒则向上舍入。
我还存储了未捕获毫秒的值,例如98:40:12。有许多记录存储的时间超过 24 小时,有带毫秒 (97:18:59.32) 的记录,也有不带毫秒 (98:40:12) 的记录。
我看到很多将秒转换为 HH:MM:SS.MS
的查询,但没有其他方式。我还看到许多包含日期的查询,但我没有与时间一起存储的日期。
希望我说得清楚。
我尝试了以下方法:
(DATEPART(hh, trntime.time1) * 60 * 60) + (DATEPART(MI, trntime.time1) * 60) + DATEPART(s, trntime.time1) AS 'Calc_time1_Secs'
但我收到以下错误消息:
Msg 241, Level 16, State 1, Line 4
Conversion failed when converting date and/or time from character string.
最佳答案
任何大于 24 的小时值对于 TIME
类型来说都不能真正使用。由于除了第一个字段之外的所有字段都是固定长度,您可以:
;with T(f) as (select '97:18:59.32')
select
(LEFT(f, CHARINDEX(':', f) - 1) * 60 * 60)
+ (SUBSTRING(f, CHARINDEX(':', f) + 1, 2) * 60)
+ SUBSTRING(f, CHARINDEX(':', f) + 4, 2)
+ CASE WHEN (SUBSTRING(f, CHARINDEX(':', f) + 7, LEN(f)) >= 50)
THEN 1 ELSE 0 END
from T
或者
select
(LEFT(f, CHARINDEX(':', f) - 1) * 60 * 60)
+ CAST(ROUND(DATEDIFF(MILLISECOND, 0, '00'
+ (SUBSTRING(f, CHARINDEX(':', f), LEN(f)))) / 1000.0, 0) AS INT)
from T
关于sql-server - 使用 SQL Server 2008 R2 将 HH :MM:SS. MS 转换为秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27234159/