我正在从旧的基于文本的系统中清理一些数据。系统以以下格式跟踪电影的放映时间:'86:08'
。
这意味着1小时26分8秒。
我能够像这样转换第一部分:
declare @t varchar(10)
set @t = '86:08'
select @t as t,
t2 = try_convert(time,format(dateadd(minute,cast(left(@t, 2) as int),0),'hh:mm','en-US'))
结果:
t t2
86:08 01:26:00.0000000
我又如何获得秒数,所以结果将是01:26:08:0000
?
答案 0 :(得分:2)
您可以恢复最右边的2位数字,并转换为秒而不是分钟。
考虑:
try_convert(
time,
format(
dateadd(second,cast(left(@t, 2) as int)*60 + cast(right(@t, 2) as int), 0),
'hh:mm:ss','en-US')
)
declare @t varchar(10)
set @t = '86:08'
select
@t as t,
t2 = try_convert(
time,
format(
dateadd(second,cast(left(@t, 2) as int)*60 + cast(right(@t, 2) as int), 0),
'hh:mm:ss','en-US')
)
GO
t | t2 :---- | :------- 86:08 | 01:26:08
答案 1 :(得分:1)
您在这里:
由于小数部分被丢弃,您需要乘以毫秒。
SELECT DATEADD(ms, 86.08 * 1000, 0)
如果您希望不包含日期部分,可以使用样式为114的CONVERT
SELECT CONVERT(varchar, DATEADD(ms, 86.08 * 1000, 0), 114)
答案 2 :(得分:1)
您可以将值转换为秒,然后返回到time
:
select @t as t,
convert(time, dateadd(second, left(@t, 2) * 60 + right(@t, 2), 0))