datetime (Transact-SQL)datetime (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 fracciones de segundos basada en un reloj de 24 horas.Defines a date that is combined with a time of day with fractional seconds that is based on a 24-hour clock.

Nota

Use los tipos de datos time, date, datetime2 y datetimeoffset para nuevos trabajos.Use the time, date, datetime2 and datetimeoffset data types for new work. Estos tipos se alinean con el estándar SQL.These types align with the SQL Standard. Son más portátiles.They are more portable. time, datetime2 y datetimeoffset proporcionan una mayor precisión de segundos.time, datetime2 and datetimeoffset provide more seconds precision. datetimeoffset proporciona compatibilidad de zona horaria para las aplicaciones implementadas globalmente.datetimeoffset provides time zone support for globally deployed applications.

Descripción de datetimedatetime Description

PropiedadProperty ValorValue
SintaxisSyntax datetimedatetime
UsoUsage DECLARE @MyDatetime datetimeDECLARE @MyDatetime datetime

CREATE TABLE Table1 ( Column1 datetime )CREATE TABLE Table1 ( Column1 datetime )
Formatos de literal de cadena predeterminadosDefault string literal formats

(se usa para el cliente de nivel inferior)(used for down-level client)
No aplicableNot applicable
Intervalo de fechasDate range Del 01.01.53 hasta el 31.12.99January 1, 1753, through December 31, 9999
Intervalo de horasTime range De 00:00:00 a 23:59:59,99700:00:00 through 23:59:59.997
Intervalo de ajuste de zona horariaTime zone offset range NoneNone
Intervalos de elementosElement ranges AAAA es una cifra de cuatro dígitos comprendida entre 1753 y 9999 que representa un año.YYYY is four digits from 1753 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 tres dígitos comprendida entre 0 y 999 que representa las fracciones de segundos.n* is zero to three digits, ranging from 0 to 999, that represent the fractional seconds.
Longitud en caracteresCharacter length 19 posiciones como mínimo a 23 como máximo19 positions minimum to 23 maximum
Tamaño de almacenamientoStorage size 8 bytes8 bytes
PrecisiónAccuracy Se redondea en incrementos de 0,000, 0,003 o 0.007 segundosRounded to increments of .000, .003, or .007 seconds
Valor predeterminadoDefault value 1900-01-01 00:00:001900-01-01 00:00:00
CalendarioCalendar Gregoriano (incluye el intervalo completo de años).Gregorian (Does include the complete range of years.)
Precisión de fracciones de segundo definida por el usuarioUser-defined fractional second precision NoNo
Conservación y reconocimiento del ajuste de zona horariaTime zone offset aware and preservation NoNo
Reconocimiento del horario de veranoDaylight saving aware NoNo

Formatos del literales de cadena compatibles para datetimeSupported String Literal Formats for datetime

En estas tablas se enumeran los formatos de literales de cadena compatibles para datetime.The following tables list the supported string literal formats for datetime. Excepto para ODBC, los literales de cadena de datetime están incluidos entre comillas simples ('), por ejemplo 'string_literaL'.Except for ODBC, datetime string literals are in single quotation marks ('), for example, 'string_literaL'. Si el entorno no es us_english, los literales de cadena deberían estar en el formato N'string_literaL'.If the environment isn't us_english, the string literals should be in the format N'string_literaL'.

NuméricoNumeric DescripciónDescription
Formatos de fecha:Date formats:

[0]4/15/[19]96 -- (mda)[0]4/15/[19]96 -- (mdy)

[0]4-15-[19]96 -- (mda)[0]4-15-[19]96 -- (mdy)

[0]4.15.[19]96 -- (mda)[0]4.15.[19]96 -- (mdy)

[0]4/[19]96/15 -- (mad)[0]4/[19]96/15 -- (myd)

15/[0]4/[19]96 -- (dma)15/[0]4/[19]96 -- (dmy)

15/[19]96/[0]4 -- (dam)15/[19]96/[0]4 -- (dym)

[19]96/15/[0]4 -- (adm)[19]96/15/[0]4 -- (ydm)

[19]96/[0]4/15 -- (amd)[19]96/[0]4/15 -- (ymd)

Formatos de hora:Time formats:

14:3014:30

14:30[:20:999]14:30[:20:999]

14:30[:20.9]14:30[:20.9]

4am4am

4 PM4 PM
Puede especificar datos de fecha con un mes en forma de número.You can specify date data with a numeric month specified. Por ejemplo, 5/20/97 representa el veinte de mayo de 1997.For example, 5/20/97 represents the twentieth day of May 1997. Cuando use un formato numérico de fecha, especifique el mes, el día y el año en una cadena con barras diagonales (/), guiones (-) o puntos (.) como separadores.When you use numeric date format, specify the month, day, and year in a string that uses slash marks (/), hyphens (-), or periods (.) as separators. Esta cadena debe aparecer de la forma siguiente:This string must appear in the following form:

número separador número separador número [hora] [hora]number separator number separator number [time] [time]



Cuando el idioma establecido es us_english, el orden predeterminado de la fecha es mdy (mes, día, año).When the language is set to us_english, the default order for the date is mdy. Para cambiar el orden de la fecha, use la instrucción SET DATEFORMAT.You can change the date order by using the SET DATEFORMAT statement.

La configuración de SET DATEFORMAT determina cómo se interpretan los valores de fecha.The setting for SET DATEFORMAT determines how date values are interpreted. Si el orden no coincide con la configuración, los valores no se interpretan como fechas.If the order doesn't match the setting, the values aren't interpreted as dates. Las fechas desordenadas pueden interpretarse como fuera del intervalo o con valores erróneos.Out-of-order dates may be misinterpreted as out of range or with wrong values. Por ejemplo, 12/10/08 se puede interpretar de seis formas distintas, en función de la configuración de DATEFORMAT.For example, 12/10/08 can be interpreted as one of six dates, depending on the DATEFORMAT setting. Un año en cuatro partes se interpreta como el año.A four-part year is interpreted as the year.
AlfabéticoAlphabetical DescripciónDescription
Abr[il] [15][,] 1996Apr[il] [15][,] 1996

Abr[il] 15[,] [19]96Apr[il] 15[,] [19]96

Abr[il] 1996 [15]Apr[il] 1996 [15]

[15] Abr[il][,] 1996[15] Apr[il][,] 1996

15 Abr[il][,][19]9615 Apr[il][,][19]96

15 [19]96 abr[il]15 [19]96 apr[il]

[15] 1996 abr[il][15] 1996 apr[il]

1996 ABR[IL] [15]1996 APR[IL] [15]

1996 [15] ABR[IL]1996 [15] APR[IL]
Puede especificar los datos de la fecha con un mes especificado como el nombre completo del mes.You can specify date data with a month specified as the full month name. Por ejemplo, abril o la abreviatura del mes Abr especificada en el idioma actual; las comas son opcionales y se omite el uso de mayúsculas.For example, April or the month abbreviation of Apr specified in the current language; commas are optional and capitalization is ignored.

Éstas son algunas directrices para utilizar los formatos alfabéticos de fecha:Here are some guidelines for using alphabetical date formats:

1) Incluya los datos de fecha y hora entre comillas simples (').1) Enclose the date and time data in single quotation marks ('). Para los idiomas distintos de inglés, utilice N'For languages other than English, use N'

2) Los caracteres que se incluyen entre corchetes son opcionales.2) Characters that are enclosed in brackets are optional.

3) Si solo especifica los dos últimos dígitos del año, los valores inferiores a los dos últimos dígitos de la opción Fecha límite de año de dos dígitos pertenecen al mismo siglo que el año límite (vea Establecer la opción de configuración del servidor Fecha límite de año de dos dígitos).3) If you specify only the last two digits of the year, values less than the last two digits of the value of the Configure the two digit year cutoff Server Configuration Option configuration option are in the same century as the cutoff year. Los valores mayores o iguales que el valor de esta opción pertenecen al siglo anterior al año límite.Values greater than or equal to the value of this option are in the century that comes before the cutoff year. Por ejemplo, si el valor de Fecha límite de año de dos dígitos es 2050 (el valor predeterminado), 25 se interpreta como 2025 y 50 se interpreta como 1950.For example, if two digit year cutoff is 2050 (default), 25 is interpreted as 2025 and 50 is interpreted as 1950. Para evitar ambigüedades, use años de cuatro dígitos.To avoid ambiguity, use four-digit years.

4) Si falta el día, se usa el primer día del mes.4) If the day is missing, the first day of the month is supplied.



El parámetro de sesión SET DATEFORMAT no se aplica cuando se especifica el mes de forma alfabética.The SET DATEFORMAT session setting isn't applied when you specify the month in alphabetical form.
ISO 8601ISO 8601 DescripciónDescription
AAAA-MM-DDThh:mm:ss[.mmm]YYYY-MM-DDThh:mm:ss[.mmm]

AAAMMDD[ hh:mm:ss[.mmm]]YYYYMMDD[ hh:mm:ss[.mmm]]
Ejemplos:Examples:

1) 2004-05-23T14:25:101) 2004-05-23T14:25:10

2) 2004-05-23T14:25:10.4872) 2004-05-23T14:25:10.487



Para usar el formato ISO 8601, debe especificar cada elemento del formato, incluida la T, los dos puntos (:) y el punto (.) que se muestran en el formato.To use the ISO 8601 format, you must specify each element in the format, including the T, the colons (:), and the period (.) that are shown in the format.

Los corchetes indican que el componente de fracción de segundo es opcional.The brackets indicate that the fraction of second component is optional. El componente de hora se especifica en el formato de 24 horas.The time component is specified in the 24-hour format.

La T indica el inicio de la parte de la hora del valor de datetime.The T indicates the start of the time part of the datetime value.

La ventaja de utilizar el formato ISO 8601 es que se trata de un estándar internacional con una especificación que evita ambigüedades.The advantage in using the ISO 8601 format is that it is an international standard with unambiguous specification. Además, este formato no se ve afectado por la configuración de SET DATEFORMAT o SET LANGUAGE.Also, this format isn't affected by the SET DATEFORMAT or SET LANGUAGE setting.
Sin separaciónUnseparated DescripciónDescription
AAAAMMDD hh:mm:ss[.mmm]YYYYMMDD hh:mm:ss[.mmm]
ODBCODBC DescripciónDescription
{ ts '1998-05-02 01:23:56.123' }{ ts '1998-05-02 01:23:56.123' }

{ d '1990-10-02' }{ d '1990-10-02' }

{ t '13:33:41' }{ t '13:33:41' }
La API de ODBC define secuencias de escape para representar valores de fecha y de hora que ODBC llama datos de marca de tiempo.The ODBC API defines escape sequences to represent date and time values, which ODBC calls timestamp data. La definición del lenguaje OLE DB (DBGUID-SQL) aceptada por el proveedor OLE DB de MicrosoftMicrosoft para SQL ServerSQL Server también admite este formato de marca de tiempo de ODBC.This ODBC timestamp format is also supported by the OLE DB language definition (DBGUID-SQL) supported by the MicrosoftMicrosoft OLE DB provider for SQL ServerSQL Server. Las aplicaciones que usan las API basadas en ODBC, OLE DB y ADO pueden usar este formato de marca de tiempo de ODBC para representar fechas y horas.Applications that use the ADO, OLE DB, and ODBC-based APIs can use this ODBC timestamp format to represent dates and times.

Las secuencias de escape de marca de tiempo de ODBC tienen el formato: { literal_type 'constant_value' }:ODBC timestamp escape sequences are of the format: { literal_type 'constant_value' }:



- literal_type especifica el tipo de secuencia de escape.- literal_type specifies the type of the escape sequence. Las marcas de tiempo tienen tres especificadores literal_type:Timestamps have three literal_type specifiers:
1) d = solo fecha1) d = date only
2) t = solo hora2) t = time only
3) ts = marca de tiempo (hora + fecha)3) ts = timestamp (time + date)



- 'constant_value' es el valor de la secuencia de escape.- 'constant_value' is the value of the escape sequence. constant_value debe seguir estos formatos para cada literal_type.constant_value must follow these formats for each literal_type.
d : aaaa-mm-ddd : yyyy-mm-dd
t : hh:mm:ss[.fff]t : hh:mm:ss[.fff]
ts : aaaa-mm-dd hh:mm:ss[.fff]ts : yyyy-mm-dd hh:mm:ss[.fff]

Redondeo de precisión de las fracciones de segundo de datetimeRounding of datetime Fractional Second Precision

Los valores de datetime se redondean con incrementos de 0,000; 0,003 o 0,007 segundos, como se muestra en esta tabla.datetime values are rounded to increments of .000, .003, or .007 seconds, as shown in the following table.

Valor especificado por el usuarioUser-specified value Valor almacenado por el sistemaSystem stored value
01/01/98 23:59:59.99901/01/98 23:59:59.999 1998-01-02 00:00:00.0001998-01-02 00:00:00.000
01/01/98 23:59:59.99501/01/98 23:59:59.995

01/01/98 23:59:59.99601/01/98 23:59:59.996

01/01/98 23:59:59.99701/01/98 23:59:59.997

01/01/98 23:59:59.99801/01/98 23:59:59.998
1998-01-01 23:59:59.9971998-01-01 23:59:59.997
01/01/98 23:59:59.99201/01/98 23:59:59.992

01/01/98 23:59:59.99301/01/98 23:59:59.993

01/01/98 23:59:59.99401/01/98 23:59:59.994
1998-01-01 23:59:59.9931998-01-01 23:59:59.993
01/01/98 23:59:59.99001/01/98 23:59:59.990

01/01/98 23:59:59.99101/01/98 23:59:59.991
1998-01-01 23:59:59.9901998-01-01 23:59:59.990

Compatibilidad con ANSI e ISO 8601ANSI and ISO 8601 Compliance

datetime no es compatible con ANSI o ISO 8601.datetime isn't ANSI or ISO 8601 compliant.

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 can't 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 otros tipos de fecha y hora en el tipo de datos datetimeConverting Other Date and Time Types to the datetime Data Type

En esta sección se describe lo que ocurre cuando otros tipos de datos de fecha y hora se convierten en un tipo de datos datetime.This section describes what occurs when other date and time data types are converted to the datetime data type.

Cuando la conversión es desde date, se copian los valores de año, mes y día.When the conversion is from date, the year, month, and day are copied. El componente de hora se establece en 00:00:00.000.The time component is set to 00:00:00.000. En el código siguiente se muestran los resultados de convertir un valor date en un valor datetime.The following code shows the results of converting a date value to a datetime value.

DECLARE @date date = '12-21-16';  
DECLARE @datetime datetime = @date;  
  
SELECT @datetime AS '@datetime', @date AS '@date';  
  
--Result  
--@datetime               @date  
------------------------- ----------  
--2016-12-21 00:00:00.000 2016-12-21  

Cuando la conversión es desde time(n), se copia el componente de hora y el componente de fecha se establece en "1900-01-01".When the conversion is from time(n), the time component is copied, and the date component is set to '1900-01-01'. Cuando la precisión de las fracciones del valor de time(n) sea superior a tres dígitos, el valor se truncará para ajustarse.When the fractional precision of the time(n) value is greater than three digits, the value will be truncated to fit. En el siguiente ejemplo se muestran los resultados de convertir un valor time(4) en un valor datetime.The following example shows the results of converting a time(4) value to a datetime value.

DECLARE @time time(4) = '12:10:05.1237';  
DECLARE @datetime datetime = @time;  
  
SELECT @datetime AS '@datetime', @time AS '@time';  
  
--Result  
--@datetime               @time  
------------------------- -------------  
--1900-01-01 12:10:05.123 12:10:05.1237  

Cuando la conversión es desde smalldatetime, se copian las horas y los minutos.When the conversion is from smalldatetime, the hours and minutes are copied. Los segundos y las fracciones de segundo se establecen en 0.The seconds and fractional seconds are set to 0. En el código siguiente se muestran los resultados de convertir un valor smalldatetime en un valor datetime.The following code shows the results of converting a smalldatetime value to a datetime value.

DECLARE @smalldatetime smalldatetime = '12-01-16 12:32';  
DECLARE @datetime datetime = @smalldatetime;  
  
SELECT @datetime AS '@datetime', @smalldatetime AS '@smalldatetime';  
  
--Result  
--@datetime               @smalldatetime  
------------------------- -----------------------  
--2016-12-01 12:32:00.000 2016-12-01 12:32:00  

Cuando la conversión es desde datetimeoffset(n), se copian los componentes de fecha y hora.When the conversion is from datetimeoffset(n), the date and time components are copied. Se trunca la zona horaria.The time zone is truncated. Cuando la precisión de las fracciones del valor de datetimeoffset(n) sea superior a tres dígitos, el valor se truncará.When the fractional precision of the datetimeoffset(n) value is greater than three digits, the value will be truncated. En el siguiente ejemplo se muestran los resultados de convertir un valor datetimeoffset(4) en un valor datetime.The following example shows the results of converting a datetimeoffset(4) value to a datetime value.

DECLARE @datetimeoffset datetimeoffset(4) = '1968-10-23 12:45:37.1234 +10:0';  
DECLARE @datetime datetime = @datetimeoffset;  
  
SELECT @datetime AS '@datetime', @datetimeoffset AS '@datetimeoffset';  
  
--Result  
--@datetime               @datetimeoffset  
------------------------- ------------------------------  
--1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237 +01:0   

Cuando la conversión es desde datetime2(n), se copian la fecha y la hora.When the conversion is from datetime2(n), the date and time are copied. Cuando la precisión de las fracciones del valor de datetime2(n) sea superior a tres dígitos, el valor se truncará.When the fractional precision of the datetime2(n) value is greater than three digits, the value will be truncated. En el siguiente ejemplo se muestran los resultados de convertir un valor datetime2(4) en un valor datetime.The following example shows the results of converting a datetime2(4) value to a datetime value.

DECLARE @datetime2 datetime2(4) = '1968-10-23 12:45:37.1237';  
DECLARE @datetime datetime = @datetime2;  
  
SELECT @datetime AS '@datetime', @datetime2 AS '@datetime2';  
  
--Result  
--@datetime               @datetime2  
------------------------- ------------------------  
--1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237  

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';  

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
datetimedatetime 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)