AT TIME ZONE (Transact-SQL)AT TIME ZONE (Transact-SQL)

SE APLICA A: síSQL Server síAzure SQL Database síAzure Synapse Analytics (SQL DW) noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Convierte un valor inputdate en el valor datetimeoffset correspondiente en la zona horaria de destino.Converts an inputdate to the corresponding datetimeoffset value in the target time zone. Si inputdate se proporciona sin información de desplazamiento, la función aplica el desplazamiento de la zona horaria, suponiendo que el valor inputdate se proporcione en la zona horaria de destino.When inputdate is provided without offset information, the function applies the offset of the time zone assuming that inputdate is in the target time zone. Si inputdate se proporciona como un valor datetimeoffset, la cláusula AT TIME ZONE lo convierte en la zona horaria de destino mediante las reglas de conversión de zona horaria.If inputdate is provided as a datetimeoffset value, then AT TIME ZONE clause converts it into the target time zone using the time zone conversion rules.

La implementación de AT TIME ZONE se basa en un mecanismo de Windows para convertir valores datetime entre zonas horarias.AT TIME ZONE implementation relies on a Windows mechanism to convert datetime values across time zones.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

inputdate AT TIME ZONE timezone  

ArgumentosArguments

inputdateinputdate
Es una expresión que se puede resolver en un valor smalldatetime, datetime, datetime2 o datetimeoffset.Is an expression that can be resolved to a smalldatetime, datetime, datetime2, or datetimeoffset value.

timezonetimezone
Nombre de la zona horaria de destino.Name of the destination time zone. SQL ServerSQL Server se basa en las zonas horarias almacenadas en el Registro de Windows.relies on time zones that are stored in the Windows Registry. Las zonas horarias instaladas en el equipo se almacenan en el siguiente subárbol del Registro: KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones.Time zones installed on the computer are stored in the following registry hive: KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones. También se puede exponer una lista de las zonas horarias instaladas a través de la vista sys.time_zone_info (Transact-SQL).A list of installed time zones is also exposed through the sys.time_zone_info (Transact-SQL) view.

Tipos devueltosReturn Types

Devuelve el tipo de datos de datetimeoffset.Returns the data type of datetimeoffset.

Valor devueltoReturn Value

Valor datetimeoffset de la zona horaria de destino.The datetimeoffset value in the target time zone.

NotasRemarks

AT TIME ZONE aplica reglas específicas para la conversión de valores de entrada en tipos de datos smalldatetime, datetime y datetime2, que se encuentran en un intervalo afectado por el cambio del horario de verano:AT TIME ZONE applies specific rules for converting input values in smalldatetime, datetime, and datetime2 data types that fall into an interval affected by a DST change:

  • Cuando los relojes están adelantados, hay un desfase en la hora local igual a la duración del ajuste de reloj.When the clock's set ahead, there's a gap in local time equal to the duration of the clock adjustment. La duración suele ser de 1 hora, pero también puede ser de 30 o 45 minutos, según la zona horaria.This duration is usually 1 hour, but it can be 30 or 45 minutes, depending on time zone. Los puntos en tiempo que están en este desfase se convierten con el desplazamiento después del cambio del horario de verano.Points in time that are in this gap are converted with the offset after DST change.

    /*  
        Moving to DST in "Central European Standard Time" zone: 
        offset changes from +01:00 -> +02:00   
        Change occurred on March 29th, 2015 at 02:00:00.   
        Adjusted local time became 2015-03-29 03:00:00.  
    */  
    
    --Time before DST change has standard time offset (+01:00)
    SELECT CONVERT(datetime2(0), '2015-03-29T01:01:00', 126)     
    AT TIME ZONE 'Central European Standard Time';  
    --Result: 2015-03-29 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), '2015-03-29T02:01:00', 126)   
    AT TIME ZONE 'Central European Standard Time';  
    --Result: 2015-03-29 03:01:00 +02:00
    
    --Time after 03:00 is presented with the summer time offset (+02:00)
    SELECT CONVERT(datetime2(0), '2015-03-29T03:01:00', 126)   
    AT TIME ZONE 'Central European Standard Time';  
    --Result: 2015-03-29 03:01:00 +02:00  
    
    
  • Cuando el reloj se vuelve a configurar, dos horas de la hora local se superponen en una hora.When the clock is set back, then 2 hours of local time are overlapped onto one hour. En ese caso, los momentos que coinciden con el intervalo superpuesto se presentan con el desplazamiento antes del cambio del reloj:In that case, points in time that belong to the overlapped interval are presented with the offset before the clock change:

    /*  
        Moving back from DST to standard time in 
        "Central European Standard Time" zone: 
        offset changes from +02:00 -> +01:00.  
        Change occurred on October 25th, 2015 at 03:00:00.   
        Adjusted local time became 2015-10-25 02:00:00   
    */  
    
    --Time before the change has DST offset (+02:00)
    SELECT CONVERT(datetime2(0), '2015-10-25T01:01:00', 126)      
    AT TIME ZONE 'Central European Standard Time';  
    --Result: 2015-10-25 01:01:00 +02:00  
    
    /*
      Time from the "overlapped interval" is presented with standard time 
      offset (before the change)    
    */
    SELECT CONVERT(datetime2(0), '2015-10-25T02:00:00', 126)   
    AT TIME ZONE 'Central European Standard Time';  
    --Result: 2015-10-25 02:00:00 +02:00  
    
    
    --Time after 03:00 is regularly presented with the standard time offset (+01:00)    
    SELECT CONVERT(datetime2(0), '2015-10-25T03:01:00', 126)   
    AT TIME ZONE 'Central European Standard Time';  
    --Result: 2015-10-25 03:01:00 +01:00
    
    

Puesto que parte de la información (por ejemplo, las reglas de zona horaria) se mantiene fuera de SQL ServerSQL Server y está sujeta a cambios ocasionales, la función AT TIME ZONE se clasifica como no determinista.Since some information (such as timezone rules) is maintained outside of SQL ServerSQL Server and are subject to occasional change, the AT TIME ZONE function is classed as nondeterministic.

EjemplosExamples

A.A. Agregar un desplazamiento de zona horaria de destino a una fecha y hora sin información de desplazamientoAdd target time zone offset to datetime without offset information

Use AT TIME ZONE para agregar un desplazamiento basado en reglas de zona horaria cuando sepa que los valores datetime originales se proporcionan en la misma zona horaria:Use AT TIME ZONE to add offset based on time zone rules when you know that the original datetime values are provided in the same time zone:

USE AdventureWorks2016;  
GO  
  
SELECT SalesOrderID, OrderDate,   
    OrderDate AT TIME ZONE 'Pacific Standard Time' AS OrderDate_TimeZonePST  
FROM Sales.SalesOrderHeader;  

B.B. Convertir valores entre zonas horarias diferentesConvert values between different time zones

En el ejemplo siguiente se convierten valores entre zonas horarias diferentes:The following example converts values between different time zones:

USE AdventureWorks2016;  
GO  
  
SELECT SalesOrderID, OrderDate,   
    OrderDate AT TIME ZONE 'Pacific Standard Time' AS OrderDate_TimeZonePST,  
    OrderDate AT TIME ZONE 'Central European Standard Time' AS OrderDate_TimeZoneCET  
FROM Sales.SalesOrderHeader;  

C.C. Consultar tablas temporales con la zona horaria localQuery Temporal Tables using local time zone

En el ejemplo siguiente se seleccionan datos de una tabla temporal.The following example selects data from a temporal table.

USE AdventureWorks2016;  
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;  

Consulte tambiénSee Also

Tipos de fecha y hora Date and Time Types
Tipos de datos y funciones de fecha y hora (Transact-SQL)Date and Time Data Types and Functions (Transact-SQL)