SQL Формат даты сервера для Datetimeoffset с указанным форматом c - PullRequest
0 голосов
/ 28 мая 2020

У меня есть таблица базы данных с полем datetime на SQL сервере.

Я должен отправить, как показано ниже. Не могли бы вы помочь, как получить этот формат даты?

Пример: 2020-06-10T13: 11: 00-05: 00

Спасибо

1 Ответ

0 голосов
/ 28 мая 2020

Если вы работали с поддерживаемой версией SQL Server, это на самом деле довольно тривиально. Если мы предположим, что , значение в таблице - 2020-06-10T13:11:00, нам понадобятся CONVERT и SWITCHOFFSET:

SELECT V.Dt,
       SWITCHOFFSET(CONVERT(datetimeoffset(0),V.dt),'-05:00')
FROM (VALUES(CONVERT(datetime2(0),'2020-06-10T13:11:00')))V(Dt);

Если это на самом деле время UT C, и вам нужно изменить его на (я полагаю) Central, тогда это будет:

SELECT V.Dt,
       CONVERT(datetimeoffset(0),V.dt) AT TIME ZONE 'Central Standard Time'
FROM (VALUES(CONVERT(datetime2(0),'2020-06-10T18:11:00')))V(Dt);

Вместо этого вам придется выполнить некоторые varchar манипуляции, поскольку вы используете версию of SQL Сервер, который полностью не поддерживается:

--If switching the offset
SELECT V.Dt,
       CONVERT(datetimeoffset(0),CONVERT(varchar(20),V.Dt,126) + '-05:00')
FROM (VALUES(CONVERT(datetime2(0),'2020-06-10T13:11:00')))V(Dt);

--If changing the offset
SELECT V.Dt,
       CONVERT(datetimeoffset(0),CONVERT(varchar(20),DATEADD(HOUR, -5,V.Dt),126) + '-05:00')
FROM (VALUES(CONVERT(datetime2(0),'2020-06-10T18:11:00')))V(Dt);

Обратите внимание, что оба из них являются агнозити DST c, так как это SWITCHOFFSET. Только AT TIME ZONE учитывает летнее время.

...