SQL - ВРЕМЕННАЯ ЗОНА - PullRequest
       1

SQL - ВРЕМЕННАЯ ЗОНА

0 голосов
/ 25 октября 2018

У меня есть этот запрос, который правильно возвращает центральноевропейское время как +2 часа.Тем не менее, это не добавляет эти два часа ко времени.Как добавить эти два часа времени (или х часов в зависимости от часового пояса)?

DECLARE @targettimezone AS sysname = 'Central European Standard Time'
SELECT convert(datetime2,'2018-10-25T13:43:19.296Z') AT TIME ZONE @targettimezone;

Ответы [ 3 ]

0 голосов
/ 25 октября 2018

Вам необходимо записать смещение с помощью функции DATEPART в SQL Server, а затем применить его к вашему времени UTC.

DECLARE @utcDateTime DATETIME = '2018-10-25T13:43:19.296Z'
DECLARE @targetTimeZone AS SYSNAME = 'Central European Standard Time'

DECLARE @offsetMinutes INT
DECLARE @targetDateTime DATETIME

--Get the offset value in minutes
SET @offsetMinutes = DATEPART(tz, CONVERT(DATETIME2, @utcDateTime) AT TIME ZONE 
@targettimezone)
--Add the offset to the UTC time
SET @targetDateTime = DATEADD(MINUTE, @offsetMinutes, @utcDateTime)

--No you have the value in the target time zone
SELECT @targetDateTime
0 голосов
/ 25 октября 2018

Давайте немного поможем движку:

DECLARE @targettimezone AS sysname = 'Central European Standard Time'
SELECT convert(datetime2,'2018-10-25T13:43:19.296Z') 
    AT TIME ZONE 'UTC' 
    AT TIME ZONE @targettimezone;

Я бы ожидал, что формат, который вы указали для своей метки времени, будет изначально интерпретироваться как UTC, но, похоже, это не так.Таким образом, вышесказанное просто явно об этом.¯ \ _ (ツ) _ / ¯

0 голосов
/ 25 октября 2018

Вы можете попробовать использовать datetimeoffset вместо datetime2.

Определяет дату, которая объединяется со временем дня, которое имеет информацию о часовом поясе и основано нана 24-часовых часах.

Затем конвертируйте datetimeoffset в DateTime, чтобы получить ожидаемый результат.

DECLARE @targettimezone AS sysname = 'Central European Standard Time'
SELECT cast(cast('2018-10-25T13:43:19.296Z' as datetimeoffset) AT TIME ZONE @targettimezone as datetime2);

sqlfiddle

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