Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к: SQL Server 2016 (13.x) и более поздние версии:
конечная точка аналитики SQL
Azure
Synapse Analytics в хранилище Microsoft
Fabric в базе данных SQL Microsoft
Fabric в Microsoft Fabric
Преобразует аргумент inputdate в соответствующее значение datetimeoffset в целевом часовом поясе. Если аргумент inputdate предоставляется без сведений о смещении, функция применяет смещение часового пояса, предполагая, что inputdate находится в целевом часовом поясе. Если входное значение предоставляется в качестве значения datetimeoffset , AT TIME ZONE предложение преобразует его в целевой часовой пояс с помощью правил преобразования часовых поясов.
AT TIME ZONE реализация использует механизм Windows для преобразования значений даты и времени в часовых поясах.
Соглашения о синтаксисе Transact-SQL
Syntax
inputdate AT TIME ZONE timezone
Arguments
inputdate
Выражение, которое можно разрешить в значение smalldatetime, datetime, datetime2 или datetimeoffset.
timezone
Имя целевого часового пояса. SQL Server использует часовые пояса, хранящиеся в реестре Windows. Часовые пояса, установленные на компьютере, хранятся в следующем кусте реестра: KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones Список установленных часовых поясов также предоставляется через представление sys.time_zone_info .
Дополнительные сведения о часовых поясах для SQL Server в Linux см. в статье "Настройка часового пояса для SQL Server 2022 и более поздних версий в Linux".
Типы возвращаемых данных
Возвращает тип данных datetimeoffset.
Возвращаемое значение
Значение datetimeoffset в целевом часовом поясе.
Remarks
AT TIME ZONEПрименяет определенные правила для преобразования входных значений в типах данных smalldatetime, datetime и datetime2, которые попадают в интервал, затронутый изменением DST:
Если часы переводятся вперед, возникает разница с местным временем, равная интервалу перевода. Интервал обычно составляет 1 час, но в некоторых часовых поясах это может быть 30–45 минут. Точки во времени, попадающие в указанный период, преобразуются со смещением после перехода на летнее время.
/* Moving to DST in "Central European Standard Time" zone: offset changes from +01:00 -> +02:00 Change occurred on March 27th, 2022 at 02:00:00. Adjusted local time became 2022-03-27 03:00:00. */ --Time before DST change has standard time offset (+01:00) SELECT CONVERT(DATETIME2(0), '2022-03-27T01:01:00', 126) AT TIME ZONE 'Central European Standard Time'; --Result: 2022-03-27 01:01:00 +01:00 /* Adjusted time from the "gap interval" (between 02:00 and 03:00) is moved 1 hour ahead and presented with the summer time offset (after the DST change) */ SELECT CONVERT(DATETIME2(0), '2022-03-27T02:01:00', 126) AT TIME ZONE 'Central European Standard Time'; --Result: 2022-03-27 03:01:00 +02:00 --Time after 03:00 is presented with the summer time offset (+02:00) SELECT CONVERT(DATETIME2(0), '2022-03-27T03:01:00', 126) AT TIME ZONE 'Central European Standard Time'; --Result: 2022-03-27 03:01:00 +02:00Если время переводится назад, 2 часа местного времени перекрываются на один час. В этом случае точки во времени, входящие в перекрывающийся интервал, представляются со смещением после изменения времени.
/* Moving back from DST to standard time in "Central European Standard Time" zone: offset changes from +02:00 -> +01:00. Change occurred on October 30th, 2022 at 03:00:00. Adjusted local time became 2022-10-30 02:00:00 */ --Time before the change has DST offset (+02:00) SELECT CONVERT(DATETIME2(0), '2022-10-30T01:01:00', 126) AT TIME ZONE 'Central European Standard Time'; --Result: 2022-10-30 01:01:00 +02:00 /* Time from the "overlapped interval" is presented with DST offset (before the change) */ SELECT CONVERT(DATETIME2(0), '2022-10-30T02:00:00', 126) AT TIME ZONE 'Central European Standard Time'; --Result: 2022-10-30 02:00:00 +02:00 --Time after 03:00 is regularly presented with the standard time offset (+01:00) SELECT CONVERT(DATETIME2(0), '2022-10-30T03:01:00', 126) AT TIME ZONE 'Central European Standard Time'; --Result: 2022-10-30 03:01:00 +01:00
Так как некоторые сведения (например, правила часового пояса) поддерживаются за пределами SQL Server и подвергаются случайным изменениям, AT TIME ZONE функция классируется как недетерминированная.
Хотя datetimeoffset не поддерживается в хранилище данных в Microsoft Fabric, AT TIME ZONE можно по-прежнему использовать с datetime2, как показано в следующем примере.
Examples
A. Добавление смещения часового пояса к datetime без сведений о смещении
Используйте AT TIME ZONE для добавления смещения на основе правил часового пояса, когда вы знаете, что исходные значения даты и времени предоставляются в одном часовом поясе:
USE AdventureWorks2022;
GO
SELECT SalesOrderID, OrderDate,
OrderDate AT TIME ZONE 'Pacific Standard Time' AS OrderDate_TimeZonePST
FROM Sales.SalesOrderHeader;
B. Преобразование значений между разными часовыми поясами
В следующем примере выполняется преобразование значений из одного часового пояса в другой. Значения OrderDate — datetime и не хранятся со смещением, но известны как тихоокеанское стандартное время. В первую очередь необходимо назначить известное смещение и выполнить преобразование в новый часовой пояс:
USE AdventureWorks2022;
GO
SELECT SalesOrderID, OrderDate,
--Assign the known offset only
OrderDate AT TIME ZONE 'Pacific Standard Time' AS OrderDate_TimeZonePST,
--Assign the known offset, then convert to another time zone
OrderDate AT TIME ZONE 'Pacific Standard Time' AT TIME ZONE 'Central European Standard Time' AS OrderDate_TimeZoneCET
FROM Sales.SalesOrderHeader;
Вы также можете заменить локальную переменную, содержащую часовой пояс:
USE AdventureWorks2022;
GO
DECLARE @CustomerTimeZone nvarchar(128) = 'Central European Standard Time';
SELECT SalesOrderID, OrderDate,
--Assign the known offset only
OrderDate AT TIME ZONE 'Pacific Standard Time' AS OrderDate_TimeZonePST,
--Assign the known offset, then convert to another time zone
OrderDate AT TIME ZONE 'Pacific Standard Time' AT TIME ZONE @CustomerTimeZone AS OrderDate_TimeZoneCustomer
FROM Sales.SalesOrderHeader;
C. Запрос темпоральных таблиц с помощью определенного часового пояса
В приведенном ниже примере показан выбор данных из темпоральной таблицы по тихоокеанскому времени США (зима).
USE AdventureWorks2022;
GO
DECLARE @ASOF DATETIMEOFFSET;
SET @ASOF = DATEADD(MONTH, -1, GETDATE()) AT TIME ZONE 'UTC';
-- Query state of the table a month ago projecting period
-- columns as Pacific Standard Time
SELECT BusinessEntityID,
PersonType,
NameStyle,
Title,
FirstName,
MiddleName,
ValidFrom AT TIME ZONE 'Pacific Standard Time'
FROM Person.Person_Temporal
FOR SYSTEM_TIME AS OF @ASOF;