Как преобразовать возвращаемое значение AT TIME ZONE в фактическое значение даты и времени в SQL Server 2016? - PullRequest
0 голосов
/ 27 мая 2019

Я хочу преобразовать значение UTC в восточный часовой пояс (любой часовой пояс) напрямую в SQL.Я пытаюсь выполнить приведенный ниже запрос, но получаю DATETIMEOFFSET.

Я пытаюсь преобразовать DateTime ниже UTC в восточный часовой пояс.

SELECT CONVERT(DATETIME,'2019-05-27 13:00:00' AT TIME ZONE 'Eastern Standard Time'

Я ожидаю, что для указанного выше запроса будет значение '2019-05-27 09:00:00 ', но фактический результат будет выглядеть как' 2019-05-27 13:00:00 -04: 00 '

Ответы [ 2 ]

1 голос
/ 27 мая 2019

вы можете сделать это

 select CONVERT(datetime, SWITCHOFFSET(CONVERT(datetimeoffset, '2019-05-27 13:00:00'), DATEPART(TZOFFSET, 
SYSDATETIMEOFFSET() AT TIME ZONE 'Eastern Standard Time')))
0 голосов
/ 27 мая 2019

Ты рядом. До сих пор вы указали SQL Server собственный часовой пояс для даты и времени, в которое вы ввели. Теперь вам нужно указать его, чтобы преобразовать его во что-то другое. Это должно сделать трюк:

SELECT CONVERT(DATETIME,'2019-05-27 13:00:00')
   AT TIME ZONE 'Eastern Standard Time'
   AT TIME ZONE 'UTC';

Это должно дать вам что-то со смещением -00:00. Если вы не хотите этого, приведите результат к типу данных без часового пояса.

...