使用T-SQL将非标准的mm:ss转换为hh:mm:ss

时间:2019-04-05 22:41:50

标签: sql sql-server tsql

我正在从旧的基于文本的系统中清理一些数据。系统以以下格式跟踪电影的放映时间:'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

3 个答案:

答案 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')
)

Demo on DB Fiddle

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))