SQL преобразование даты ЧЧММСС.CCCNNNNNN в гггг-мм-дд чч: ми: сс.ммм - PullRequest
0 голосов
/ 30 мая 2018

У меня есть данные в этом формате: 114643.052303537 (HHMMSS.CCCNNNNNN).

Мне нужно преобразовать их в этот формат: 2018-04-25 12: 40: 59.573 (гггг-мм-дд чч:mi: ss.mmm), полосу части даты (т.е. 2018-04-25) и вычислите разницу во времени между двумя форматами.

Не могли бы вы помочь с этим?

Ответы [ 2 ]

0 голосов
/ 30 мая 2018
declare @dt datetime = '2018-04-25 12:40:59.573'
declare @dunno varchar(16) = '114643.052303537'

Уберите дату из даты и времени и дайте ей сегодняшнюю дату

getdate() + right(convert(varchar,@dt,113),12)

Конвертируйте varchar во время и задайте сегодняшнюю дату

getdate() + left(stuff(stuff(@dunno,3,0,':'),6,0,':'),8)

Найдите миллисекунды между ними

datediff(millisecond,getdate() + left(stuff(stuff(@dunno,3,0,':'),6,0,':'),8),getdate() + right(convert(varchar,@dt,113),12))

Соберите все вместе в вашем формате

select
    convert(char(13),
            dateadd(millisecond,
                    datediff(millisecond,getdate() + left(stuff(stuff(@dunno,3,0,':'),6,0,':'),8),getdate() + right(convert(varchar,@dt,113),12)),
                    '01/01/00'),
            14)

В зависимости от скорости вашего сервера и другого кода, было бы разумно использовать переменную для GETDATE() вначало предотвращения различий в миллисекундах или даже секундах во время преобразования.

declare @dt datetime = '2018-04-25 12:40:59.573'
declare @dunno varchar(16) = '114643.052303537'
declare @today datetime = getdate()

declare @dunno2 datetime
declare @dt2 datetime

set @dt2 = @today + right(convert(varchar,@dt,113),12)
set @dunno2 = @today + left(stuff(stuff(@dunno,3,0,':'),6,0,':'),8)

select
    convert(char(13),
        dateadd(millisecond,
                datediff(millisecond,@dunno2,@dt2),
                '01/01/00'),
        14)
0 голосов
/ 30 мая 2018

Мне нужна разница во времени в формате чч: ми: сс.значение, имеющее дату);вычислите разницу с помощью простого вычитания, а затем преобразуйте результат в hh: mi: ss.mmm с операциями деления и по модулю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...