datetimeoffset (Transact-SQL)datetimeoffset (Transact-SQL)

SE APLICA A: síSQL Server síAzure SQL Database síAzure SQL Data Warehouse síAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Define una fecha que se combina con una hora del día con reconocimiento de zona horaria y basado en un reloj de 24 horas.Defines a date that is combined with a time of a day that has time zone awareness and is based on a 24-hour clock.

Descripción de datetimeoffsetdatetimeoffset description

PropiedadProperty ValorValue
SintaxisSyntax datetimeoffset [(precisión de fracciones de segundo)]datetimeoffset [ (fractional seconds precision) ]
UsoUsage DECLARE @MyDatetimeoffset datetimeoffset(7)DECLARE @MyDatetimeoffset datetimeoffset(7)

CREATE TABLE Table1 ( Column1 datetimeoffset(7) )CREATE TABLE Table1 ( Column1 datetimeoffset(7) )
Formatos de literal de cadena predeterminados (utilizados para el cliente de nivel inferior)Default string literal formats (used for down-level client) YYYY-MM-DD hh:mm:ss[.nnnnnnn] [{+|-}hh:mm]YYYY-MM-DD hh:mm:ss[.nnnnnnn] [{+|-}hh:mm]

Para más información, vea la sección "Compatibilidad con versiones anteriores de clientes de niveles inferiores" más adelante.For more information, see the "Backward Compatibility for Down-level Clients" section that follows.
Intervalo de fechasDate range De 0001-01-01 a 31.12.990001-01-01 through 9999-12-31

Del 1 de enero del año 1 E. C. al 31 de diciembre de 9999 E. C.January 1, 1 CE through December 31, 9999 CE
Intervalo de horasTime range De 00:00:00 a 23:59:59.999999900:00:00 through 23:59:59.9999999
Intervalo de ajuste de zona horariaTime zone offset range De -14:00 a +14:00-14:00 through +14:00
Intervalos de elementosElement ranges AAAA es una cifra de cuatro dígitos comprendida entre 0001 y 9999 que representa un año.YYYY is four digits, ranging from 0001 through 9999, that represent a year.

MM es una cifra de dos dígitos, comprendida entre 01 y 12, que representa un mes del año especificado.MM is two digits, ranging from 01 to 12, that represent a month in the specified year.

DD es una cifra de dos dígitos, comprendida entre 01 y 31 dependiendo del mes, que representa un día del mes especificado.DD is two digits, ranging from 01 to 31 depending on the month, that represent a day of the specified month.

hh es una cifra de dos dígitos comprendida entre 00 y 23 que representa la hora.hh is two digits, ranging from 00 to 23, that represent the hour.

mm es una cifra de dos dígitos comprendida entre 00 y 59 que representa los minutos.mm is two digits, ranging from 00 to 59, that represent the minute.

s es una cifra de dos dígitos comprendida entre 00 y 59 que representa los segundos.ss is two digits, ranging from 00 to 59, that represent the second.

n* es una cifra de cero a siete dígitos comprendida entre 0 y 9999999 que representa las fracciones de segundos.n* is zero to seven digits, ranging from 0 to 9999999, that represent the fractional seconds.

hh es una cifra de dos dígitos comprendida entre -14 y 14.hh is two digits that range from -14 to +14.

mm es una cifra de dos dígitos comprendida entre 00 y 59.mm is two digits that range from 00 to 59.
Longitud en caracteresCharacter length De 26 posiciones como mínimo (AAAA-MM-DD hh:mm:ss {+|-}hh:mm) a 34 como máximo (AAAA-MM-DD hh:mm:ss.nnnnnnn {+|-}hh:mm)26 positions minimum (YYYY-MM-DD hh:mm:ss {+|-}hh:mm) to 34 maximum (YYYY-MM-DD hh:mm:ss.nnnnnnn {+|-}hh:mm)
Precisión, escalaPrecision, scale Vea la tabla siguiente.See the table below.
Tamaño de almacenamientoStorage size 10 bytes, fijo es el valor predeterminado con el valor predeterminado de 100 ns de precisión de fracciones de segundo.10 bytes, fixed is the default with the default of 100ns fractional second precision.
PrecisiónAccuracy 100 nanosegundos100 nanoseconds
Valor predeterminadoDefault value 1900-01-01 00:00:00 00:001900-01-01 00:00:00 00:00
CalendarioCalendar GregorianoGregorian
Precisión de fracciones de segundo definida por el usuarioUser-defined fractional second precision Yes
Conservación y reconocimiento del ajuste de zona horariaTime zone offset aware and preservation Yes
Reconocimiento del horario de veranoDaylight saving aware NoNo
Escala especificadaSpecified scale Resultado (precisión, escala)Result (precision, scale) Longitud de la columna (bytes)Column length (bytes) Precisión de fracciones de segundoFractional seconds precision
datetimeoffsetdatetimeoffset (34,7)(34,7) 1010 77
datetimeoffset(0)datetimeoffset(0) (26,0)(26,0) 88 0-20-2
datetimeoffset(1)datetimeoffset(1) (28,1)(28,1) 88 0-20-2
datetimeoffset(2)datetimeoffset(2) (29,2)(29,2) 88 0-20-2
datetimeoffset(3)datetimeoffset(3) (30,3)(30,3) 99 3-43-4
datetimeoffset(4)datetimeoffset(4) (31,4)(31,4) 99 3-43-4
datetimeoffset(5)datetimeoffset(5) (32,5)(32,5) 1010 5-75-7
datetimeoffset(6)datetimeoffset(6) (33,6)(33,6) 1010 5-75-7
datetimeoffset(7)datetimeoffset(7) (34,7)(34,7) 1010 5-75-7

Formatos de literales de cadena admitidos para datetimeoffsetSupported string literal formats for datetimeoffset

En esta tabla se enumeran los formatos de literales de cadena ISO 8601 admitidos para datetimeoffset.The following table lists the supported ISO 8601 string literal formats for datetimeoffset. Para más información sobre los formatos alfabético, numérico, sin separación y de hora de las partes de fecha y hora de datetimeoffset, vea date (Transact-SQL) y time (Transact-SQL).For information about alphabetical, numeric, unseparated and time formats for the date and time parts of datetimeoffset, see date (Transact-SQL) and time (Transact-SQL).

ISO 8601ISO 8601 DescripciónDescription
YYYY-MM-DDThh:mm:ss[.nnnnnnn][{+|-}hh:mm]YYYY-MM-DDThh:mm:ss[.nnnnnnn][{+|-}hh:mm] Estos dos formatos no se ven afectados por la configuración regional de sesión de SET LANGUAGE y SET DATEFORMAT.These two formats are not affected by the SET LANGUAGE and SET DATEFORMAT session locale settings. No se permiten espacios entre las partes de datetimeoffset y datetime.Spaces are not allowed between the datetimeoffset and the datetime parts.
AAAA-MM-DDThh:mm:ss[.nnnnnnn]Z (UTC)YYYY-MM-DDThh:mm:ss[.nnnnnnn]Z (UTC) Este formato por definición de ISO indica que la parte datetime se debería expresar en Hora universal coordinada (UTC).This format by ISO definition indicates the datetime portion should be expressed in Coordinated Universal Time (UTC). Por ejemplo, 1999-12-12 12:30:30.12345 -07: 00 se deberían representar como 1999-12-12 19:30:30.12345 Z.For example, 1999-12-12 12:30:30.12345 -07:00 should be represented as 1999-12-12 19:30:30.12345Z.

Ajuste de zona horariaTime zone offset

El desplazamiento de zona horaria especifica el desplazamiento de zona a partir de Hora UTC para un valor time o datetime.A time zone offset specifies the zone offset from UTC for a time or datetime value. El ajuste de zona horaria se puede representar como [+ | -] hh:mm:The time zone offset can be represented as [+|-] hh:mm:

  • hh es una cifra de dos dígitos comprendidos entre 00 a 14 y representa el número de horas en el ajuste de zona horaria.hh is two digits that range from 00 to 14 and represent the number of hours in the time zone offset.
  • mm es una cifra de dos dígitos comprendidos entre 00 a 59 y representa el número minutos adicionales en el ajuste de zona horaria.mm is two digits, ranging from 00 to 59, that represent the number of additional minutes in the time zone offset.
  • + (más) o - (menos) es el signo que se usa obligatoriamente para indicar un ajuste de zona horaria.+ (plus) or - (minus) is the mandatory sign for a time zone offset. Esto indica si el ajuste de zona horaria se agrega o resta de la hora UTC para obtener la hora local.This indicates whether the time zone offset is added or subtracted from the UTC time to obtain the local time. El intervalo válido de ajuste de zona horaria es de -14: 00 a +14: 00.The valid range of time zone offset is from -14:00 to +14:00.

El intervalo del ajuste de zona horaria sigue la norma de W3C XML para la definición del esquema XSD y es ligeramente diferente de la definición estándar de SQL 2003, de 12:59 a +14: 00.The time zone offset range follows the W3C XML standard for XSD schema definition and is slightly different from the SQL 2003 standard definition, 12:59 to +14:00.

El parámetro de tipo opcional precisión de fracciones de segundo especifica el número de dígitos para la parte fraccionaria de los segundos.The optional type parameter fractional seconds precision specifies the number of digits for the fractional part of the seconds. Este valor puede ser un entero con 0 a 7 (100 nanosegundos).This value can be an integer with 0 to 7 (100 nanoseconds). El valor predeterminado de precisión de fracciones de segundo es 100 ns (siete dígitos para la parte fraccionaria de los segundos).The default fractional seconds precision is 100ns (seven digits for the fractional part of the seconds).

Los datos se almacenan en la base de datos y se procesan, comparan, ordena e indizan en el servidor como en UTC.The data is stored in the database and processed, compared, sorted, and indexed in the server as in UTC. El ajuste de zona horaria se conservará en la base de datos para la recuperación.The time zone offset will be preserved in the database for retrieval.

Se supone que el desplazamiento de zona horaria determinada reconoce el horario de verano (DST) y se ajusta para cualquier datetime determinado dentro del periodo DST.The given time zone offset will be assumed to be daylight saving time (DST) aware and adjusted for any given datetime that is in the DST period.

Para el tipo datetimeoffset, los valores datetime UTC y local (al desplazamiento de la zona horaria persistente o convertido) se validarán durante las operaciones de inserción, actualización, aritmética, conversión o asignación.For datetimeoffset type, both UTC and local (to the persistent or converted time zone offset) datetime value will be validated during insert, update, arithmetic, convert, or assign operations. La detección de cualquier valor datetime UTC o local (al desplazamiento de la zona horaria persistente o convertido) que no sea válido generará un error de valor no válido.The detection of any invalid UTC or local (to the persistent or converted time zone offset) datetime value will raise an invalid value error. Por ejemplo, 9999-12-31 10:10:00 son válidos en UTC, pero se desbordan en la hora local al ajuste de zona horaria +13: 50.For example, 9999-12-31 10:10:00 is valid in UTC, but overflow in local time to the time zone offset +13:50.

Para convertir una fecha a su correspondiente valor datetimeoffset en una zona horaria de destino, vea AT TIME ZONE (Transact-SQL).To convert a date to a corresponding datetimeoffset value in a target time zone, see AT TIME ZONE (Transact-SQL).

Compatibilidad con ANSI e ISO 8601ANSI and ISO 8601 compliance

Las secciones de compatibilidad con ANSI e ISO 8601 de los temas sobre date y time se aplican también a datetimeoffset.The ANSI and ISO 8601 Compliance sections of the date and time topics apply to datetimeoffset.

Compatibilidad con versiones anteriores de clientes de niveles inferioresBackward compatibility for down-level clients

Algunos clientes de nivel inferior no admiten los tipos de datos time, date, datetime2 y datetimeoffset.Some down-level clients do not support the time, date, datetime2 and datetimeoffset data types. En la tabla siguiente se muestra la asignación de tipo entre una instancia de nivel superior de SQL ServerSQL Server y los clientes de nivel inferior.The following table shows the type mapping between an up-level instance of SQL ServerSQL Server and down-level clients.

Tipo de datos de SQL ServerSQL ServerSQL ServerSQL Server data type El formato del literal de cadena predeterminado se pasó al cliente de nivel inferiorDefault string literal format passed to down-level client ODBC de nivel inferiorDown-level ODBC OLEDB de nivel inferiorDown-level OLEDB JDBC de nivel inferiorDown-level JDBC SQLCLIENT de nivel inferiorDown-level SQLCLIENT
timetime hh:mm:ss[.nnnnnnn]hh:mm:ss[.nnnnnnn] SQL_WVARCHAR o SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR o DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String Cadena o SqStringString or SqString
datedate YYYY-MM-DDYYYY-MM-DD SQL_WVARCHAR o SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR o DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String Cadena o SqStringString or SqString
datetime2datetime2 AAAA-MM-DD hh:mm:ss[.nnnnnnn]YYYY-MM-DD hh:mm:ss[.nnnnnnn] SQL_WVARCHAR o SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR o DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String Cadena o SqStringString or SqString
datetimeoffsetdatetimeoffset YYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mmYYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm SQL_WVARCHAR o SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR o DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String Cadena o SqStringString or SqString

Convertir datos de fecha y horaConverting date and time data

Cuando se convierte a los tipos de datos de fecha y hora, SQL ServerSQL Server rechaza todos los valores que no reconoce como fechas u horas.When you convert to date and time data types, SQL ServerSQL Server rejects all values it cannot recognize as dates or times. Para más información sobre cómo usar las funciones CAST y CONVERT con datos de fecha y hora, vea CAST y CONVERT (Transact-SQL).For information about using the CAST and CONVERT functions with date and time data, see CAST and CONVERT (Transact-SQL)

Convertir el tipo de datos datetimeoffset en otros tipos de fecha y horaConverting datetimeoffset data type to other date and time types

En esta tabla se describe lo que ocurre cuando un tipo de datos datetimeoffset se convierte a otros tipos de datos de fecha y hora.This section describes what occurs when a datetimeoffset data type is converted to other date and time data types.

Al convertir a date, se copian el año, el mes y el día.When converting to date, the year, month, and day are copied. En el código siguiente se muestran los resultados de convertir un valor datetimeoffset(4) en un valor date.The following code shows the results of converting a datetimeoffset(4) value to a date value.

DECLARE @datetimeoffset datetimeoffset(4) = '12-10-25 12:32:10 +01:00';  
DECLARE @date date= @datetimeoffset;  
  
SELECT @datetimeoffset AS '@datetimeoffset ', @date AS 'date';  
  
--Result  
--@datetimeoffset                date  
-------------------------------- ----------  
--2025-12-10 12:32:10.0000 +01:0 2025-12-10  
--  
--(1 row(s) affected)  
  

Si la conversión es a time(n) , se copian la hora, los minutos, los segundos y las fracciones de segundo.If the conversion is to time(n), the hour, minute, second, and fractional seconds are copied. Se trunca el valor de zona horaria.The time zone value is truncated. Cuando la precisión del valor de datetimeoffset(n) es mayor que la precisión del valor de time(n) , el valor se redondea.When the precision of the datetimeoffset(n) value is greater than the precision of the time(n) value, the value is rounded up. En el código siguiente se muestran los resultados de convertir un valor datetimeoffset(4) en un valor time(3).The following code shows the results of converting a datetimeoffset(4) value to a time(3) value.

DECLARE @datetimeoffset datetimeoffset(4) = '12-10-25 12:32:10.1237 +01:0';  
DECLARE @time time(3) = @datetimeoffset;  
  
SELECT @datetimeoffset AS '@datetimeoffset ', @time AS 'time';  
  
--Result  
--@datetimeoffset                time  
-------------------------------- ------------  
-- 2025-12-10 12:32:10.1237 +01:00    12:32:10.124  
  
--  
--(1 row(s) affected)  
  

Cuando se convierte a datetime, se copian los valores de fecha y hora, y se trunca la zona horaria.When converting todatetime, the date and time values are copied, and the time zone is truncated. Cuando la precisión de las fracciones del valor de datetimeoffset(n) es superior a tres dígitos, el valor se trunca.When the fractional precision of the datetimeoffset(n) value is greater than three digits, the value is truncated. En el código siguiente se muestran los resultados de convertir un valor datetimeoffset(4) en un valor datetime.The following code shows the results of converting a datetimeoffset(4) value to a datetime value.

DECLARE @datetimeoffset datetimeoffset(4) = '12-10-25 12:32:10.1237 +01:0';  
DECLARE @datetime datetime = @datetimeoffset;  
  
SELECT @datetimeoffset AS '@datetimeoffset ', @datetime AS 'datetime';  
  
--Result  
--@datetimeoffset                datetime  
-------------------------------- -----------------------  
--2025-12-10 12:32:10.1237 +01:0 2025-12-10 12:32:10.123  
--  
--(1 row(s) affected)  

Para las conversiones a smalldatetime, se copia la fecha y la hora.For conversions to smalldatetime, the date and hours are copied. Los minutos se redondean hacia arriba con respecto al valor de los segundos y los segundos se establecen en 0.The minutes are rounded up with respect to the seconds value and seconds are set to 0. En el código siguiente se muestran los resultados de convertir un valor datetimeoffset(3) en un valor smalldatetime.The following code shows the results of converting a datetimeoffset(3) value to a smalldatetime value.

DECLARE @datetimeoffset datetimeoffset(3) = '1912-10-25 12:24:32 +10:0';  
DECLARE @smalldatetime smalldatetime = @datetimeoffset;  
  
SELECT @datetimeoffset AS '@datetimeoffset', @smalldatetime AS '@smalldatetime';  
  
--Result  
--@datetimeoffset                @smalldatetime  
-------------------------------- -----------------------  
--1912-10-25 12:24:32.000 +10:00 1912-10-25 12:25:00  
--  
--(1 row(s) affected)  

Si la conversión es a datetime2(n) , se copia la fecha y la hora al valor datetime2 y se trunca la zona horaria.If the conversion is to datetime2(n), the date and time are copied to the datetime2 value, and the time zone is truncated. Cuando la precisión del valor de datetime2(n) es mayor que la precisión del valor de datetimeoffset(n) , el valor de las fracciones de segundo se trunca para ajustarse.When the precision of the datetime2(n) value is greater than the precision of the datetimeoffset(n) value, the fractional seconds are truncated to fit. En el código siguiente se muestran los resultados de convertir un valor datetimeoffset(4) en un valor datetime2(3).The following code shows the results of converting a datetimeoffset(4) value to a datetime2(3) value.

DECLARE @datetimeoffset datetimeoffset(4) = '1912-10-25 12:24:32.1277 +10:0';  
DECLARE @datetime2 datetime2(3)=@datetimeoffset;  
  
SELECT @datetimeoffset AS '@datetimeoffset', @datetime2 AS '@datetime2';  
  
--Result  
@datetimeoffset                    @datetime2  
---------------------------------- ----------------------  
1912-10-25 12:24:32.1277 +10:00    1912-10-25 12:24:32.12  
  
--(1 row(s) affected)  

Convertir literales de cadena a datetimeoffsetConverting string literals to datetimeoffset

Las conversiones de literales de cadena en tipos de fecha y hora son posibles cuando todas las partes de las cadenas están en formatos válidos.Conversions from string literals to date and time types are permitted if all parts of the strings are in valid formats. En caso contrario, se generará un error en el tiempo de ejecución.Otherwise, a runtime error is raised. Las conversiones implícitas o explícitas que no especifican un estilo (desde tipos de fecha y hora hasta literales de cadena) estarán en el formato predeterminado de la sesión actual.Implicit conversions or explicit conversions that do not specify a style, from date and time types to string literals will be in the default format of the current session. En esta tabla se muestran las reglas para convertir un literal de cadena al tipo de datos datetimeoffset.The following table shows the rules for converting a string literal to the datetimeoffset data type.

Literal de cadena de entradaInput string literal datetimeoffset(n)datetimeoffset(n)
DATE de ODBCODBC DATE Los literales de cadena de ODBC se asignan al tipo de datos datetime.ODBC string literals are mapped to the datetime data type. Cualquier operación de asignación de los literales de DATETIME de ODBC a tipos datetimeoffset provocará una conversión implícita entre datetime y este tipo, tal y como se define en las reglas de conversión.Any assignment operation from ODBC DATETIME literals into datetimeoffset types will cause an implicit conversion between datetime and this type as defined by the conversion rules.
TIME de ODBCODBC TIME Vea la regla anterior de DATE de ODBC.See previous ODBC DATE rule.
DATETIME DE ODBCODBC DATETIME Vea la regla anterior de DATE de ODBC.See previous ODBC DATE rule.
Solo DATEDATE only La parte de TIME tiene como valor predeterminado 00:00:00.The TIME part defaults to 00:00:00. TIMEZONE tiene como valor predeterminado +00:00.The TIMEZONE defaults to +00:00.
Solo TIMETIME only La parte de DATE tiene como valor predeterminado 1900-1-1.The DATE part defaults to 1900-1-1. TIMEZONE tendrá como valor predeterminado +00:00.The TIMEZONE will default to +00:00.
Solo TIMEZONETIMEZONE only Se proporcionan los valores predeterminados.Default values are supplied
DATE + TIMEDATE + TIME TIMEZONE tiene como valor predeterminado +00:00.The TIMEZONE defaults to +00:00.
DATE + TIMEZONEDATE + TIMEZONE No permitidoNot allowed
TIME + TIMEZONETIME + TIMEZONE La parte de DATE tiene como valor predeterminado 1900-1-1.The DATE part defaults to 1900-1-1.
DATE + TIME + TIMEZONEDATE + TIME + TIMEZONE TrivialTrivial

EjemplosExamples

En el siguiente ejemplo se comparan los resultados de convertir una cadena a cada tipo de datos date y time.The following example compares the results of casting a string to each date and time data type.

SELECT   
     CAST('2007-05-08 12:35:29. 1234567 +12:15' AS time(7)) AS 'time'   
    ,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS date) AS 'date'   
    ,CAST('2007-05-08 12:35:29.123' AS smalldatetime) AS   
        'smalldatetime'   
    ,CAST('2007-05-08 12:35:29.123' AS datetime) AS 'datetime'   
    ,CAST('2007-05-08 12:35:29.1234567+12:15' AS datetime2(7)) AS   
        'datetime2'  
    ,CAST('2007-05-08 12:35:29.1234567 +12:15' AS datetimeoffset(7)) AS   
        'datetimeoffset'  
    ,CAST('2007-05-08 12:35:29.1234567+12:15' AS datetimeoffset(7)) AS  
        'datetimeoffset IS08601';  

El conjunto de resultados es el siguiente.Here is the result set.

Tipo de datosData type SalidaOutput
TimeTime 12:35:29.12:35:29. 12345671234567
DateDate 2007-05-082007-05-08
SmalldatetimeSmalldatetime 2007-05-08 12:35:002007-05-08 12:35:00
Fecha y horaDatetime 2007-05-08 12:35:29.1232007-05-08 12:35:29.123
datetime2datetime2 2007-05-08 12:35:29.2007-05-08 12:35:29. 12345671234567
DatetimeoffsetDatetimeoffset 2007-05-08 12:35:29.1234567 +12:152007-05-08 12:35:29.1234567 +12:15

Vea tambiénSee also

CAST y CONVERT (Transact-SQL)CAST and CONVERT (Transact-SQL)
AT TIME ZONE (Transact-SQL)AT TIME ZONE (Transact-SQL)