Преобразование нестандартных мм: сс в чч: мм: сс с T-SQL - PullRequest
2 голосов
/ 06 апреля 2019

Я выполняю очистку некоторых данных из старой текстовой системы. Система отслеживает время показа фильмов в таком формате: '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 ]

2 голосов
/ 06 апреля 2019

Вы можете восстановить 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')
)

Демонстрация на 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 голос
/ 06 апреля 2019

Вы можете преобразовать значение в секунды и обратно в time:

select @t as t, 
       convert(time, dateadd(second, left(@t, 2) * 60 + right(@t, 2), 0))
1 голос
/ 06 апреля 2019

Вот, пожалуйста:

Вам нужно умножить на миллисекунды, поскольку дробная часть отбрасывается.

SELECT DATEADD(ms, 86.08 * 1000, 0)

Если вы хотите без даты, вы можете использовать CONVERT со стилем 114

SELECT CONVERT(varchar, DATEADD(ms, 86.08 * 1000, 0), 114)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...