datetime (Transact-SQL)
Define una fecha que se combina con una hora del día con fracciones de segundos basada en un reloj de 24 horas.
[!NOTA]
Utilice los tipos de datos time, date, datetime2 y datetimeoffset para los nuevos trabajos. Estos tipos se alinean con el estándar SQL. Son más portátiles. time, datetime2 y datetimeoffset proporcionan una mayor precisión de segundos. datetimeoffset proporciona compatibilidad de zona horaria para las aplicaciones implementadas globalmente.
Descripción de datetime
Propiedad |
Valor |
---|---|
Sintaxis |
datetime |
Uso |
DECLARE @MyDatetime datetime CREATE TABLE Table1 ( Column1 datetime ) |
Formatos de literal de cadena predeterminados (se usan para el cliente de nivel inferior) |
No aplicable |
Intervalo de fechas |
Del 1 de enero de 1753 hasta el 31 de diciembre de 9999 |
Intervalo de horas |
De 00:00:00 a 23:59:59.997 |
Intervalo de ajuste de zona horaria |
Ninguno |
Intervalos de elementos |
AAAA es una cifra de cuatro dígitos comprendida entre 1753 y 9999 que representa un año. MM es una cifra de dos dígitos comprendida entre 01 y 12 que representa un mes del año especificado. DD es una cifra de dos dígitos comprendida entre 01 y 31 dependiendo del mes, que representa un día del mes especificado. hh es una cifra de dos dígitos comprendida entre 00 y 23 que representa la hora. mm es una cifra de dos dígitos comprendida entre 00 y 59 que representa los minutos. s es una cifra de dos dígitos comprendida entre 00 y 59 que representa los segundos. n* es una cifra de cero a tres dígitos comprendida entre 0 y 999 que representa las fracciones de segundos. |
Longitud de los caracteres |
19 posiciones como mínimo a 23 como máximo |
Tamaño de almacenamiento |
8 bytes |
Precisión |
Se redondea en incrementos de 0,000, 0,003 o 0.007 segundos |
Valor predeterminado |
1900-01-01 00:00:00 |
Calendario |
Gregoriano (no incluye el intervalo completo de años.) |
Precisión de fracciones de segundo definida por el usuario |
No |
Conservación y reconocimiento del ajuste de zona horaria |
No |
Reconocimiento del horario de verano |
No |
Formatos del literales de cadena compatibles para datetime
Las tablas siguientes enumeran los formatos de literales de cadena compatibles para datetime. Excepto para ODBC, los literales de cadena de datetime están incluidos entre comillas simples ('), por ejemplo 'string_literaL.' Si el entorno no es us_english, los literales de cadena deberían estar en el formato N'string_literaL'.
Numérico |
Descripción |
---|---|
Formatos de fecha: [0]4/15/[19]96 -- (mda) [0]4-15-[19]96 -- (mda) [0]4.15.[19]96 -- (mda) [0]4/[19]96/15 -- (mad) 15/[0]4/[19]96 -- (dma) 15/[19]96/[0]4 -- (dam) [19]96/15/[0]4 -- (adm) [19]96/[0]4/15 -- (amd) Formatos de hora: 14:30 14:30[:20:999] 14:30[:20.9] 4am 4 PM |
Puede especificar datos de fecha con un mes en forma de número. Por ejemplo, 5/20/97 representa el veinte de mayo de 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. Esta cadena debe aparecer de la forma siguiente:
Cuando el idioma establecido es us_english, el orden predeterminado de la fecha es mdy (mes, día, año). Para cambiar el orden de la fecha, utilice la instrucción SET DATEFORMAT. La configuración de SET DATEFORMAT determina cómo se interpretan los valores de fecha. Si el orden no coincide con esta configuración, los valores no se interpretarán como fechas porque se encuentran fuera del intervalo, o bien se interpretarán incorrectamente. Por ejemplo, 12/10/08 se puede interpretar de seis formas distintas, en función de la configuración de DATEFORMAT. Un año en cuatro partes se interpreta como el año. |
Alfabético |
Descripción |
---|---|
Abr[il] [15][,] 1996 Abr[il] 15[,] [19]96 Abr[il] 1996 [15] [15] Abr[il][,] 1996 15 Abr[il][,][19]96 15 [19]96 abr[il] [15] 1996 abr[il] 1996 ABR[IL] [15] 1996 [15] ABR[IL] |
Puede especificar los datos de la fecha con un mes especificado como el nombre completo del mes. 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. Éstas son algunas directrices para utilizar los formatos alfabéticos de fecha:
El parámetro de sesión SET DATEFORMAT no se aplica cuando se especifica el mes de forma alfabética. |
ISO 8601 |
Descripción |
---|---|
AAAA-MM-DDThh:mm:ss[.mmm] AAAMMDD[ hh:mm:ss[.mmm]] |
Ejemplos:
Para utilizar el formato ISO 8601, debe especificar todos los elementos del formato. Esto también incluye T, los dos puntos (:) y el punto (.) que se muestran en el formato. Los corchetes indican que el componente de fracción de segundo es opcional. El componente de hora se especifica en el formato de 24 horas. La T indica el inicio de la parte de hora del valor datetime. 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. Asimismo, este formato no se ve afectado por la configuración de SET DATEFORMAT o SET LANGUAGE. |
Sin separación |
Descripción |
---|---|
AAAAMMDD hh:mm:ss[.mmm] |
ODBC |
Descripción |
||||||||
---|---|---|---|---|---|---|---|---|---|
{ ts '1998-05-02 01:23:56.123' } { d '1990-10-02' } { 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. La definición del lenguaje OLE DB (DBGUID-SQL) aceptada por el proveedor OLE DB de Microsoft para SQL Server también admite este formato de marca de tiempo de ODBC. 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. Las secuencias de escape de marca de tiempo de ODBC tienen el formato: { literal_type 'constant_value' }:
|
Redondeo de precisión de las fracciones de segundo de datetime
Los valores datetime se redondean con incrementos de 0,000; 0,003 o 0,007 segundos, como se muestra en la siguiente tabla.
Valor especificado por el usuario |
Valor almacenado por el sistema |
---|---|
01/01/98 23:59:59.999 |
1998-01-02 00:00:00.000 |
01/01/98 23:59:59.995 01/01/98 23:59:59.996 01/01/98 23:59:59.997 01/01/98 23:59:59.998 |
1998-01-01 23:59:59.997 |
01/01/98 23:59:59.992 01/01/98 23:59:59.993 01/01/98 23:59:59.994 |
1998-01-01 23:59:59.993 |
01/01/98 23:59:59.990 01/01/98 23:59:59.991 |
1998-01-01 23:59:59.990 |
Compatibilidad con ANSI e ISO 8601
datetime no es conforme a ANSI ni a ISO 8601.
Convertir datos de fecha y hora
Cuando se convierte a los tipos de datos de fecha y hora, SQL Server rechaza todos los valores que no reconoce como fechas u horas. Para obtener información acerca de cómo usar las funciones CAST y CONVERT con datos de fecha y hora, vea CAST y CONVERT (Transact-SQL).
Convertir tipos datetime a otros tipos de fecha y hora
En la tabla siguiente se describe lo que ocurre cuando un tipo de datos datetime se convierte a otros tipos de datos de fecha y hora.
Tipo de datos al que se convierte |
Detalles de la conversión |
---|---|
date |
Se copian los valores de año, mes y día. El componente de hora se establece en 00:00:00.000. El código siguiente muestra los resultados de convertir un valor de date en un valor de datetime.
|
time(n) |
Se copia el componente de hora, y el componente de fecha se establece en '1900-01-01'. Cuando la precisión de las fracciones del valor de time(n) es superior a tres dígitos, el valor se truncará para ajustarse. El ejemplo siguiente muestra los resultados de convertir un valor de time(4) en un valor de datetime.
|
smalldatetime |
Se copian los valores de hora y minuto. Los segundos y las fracciones de segundo se establecen en 0. El código siguiente muestra los resultados de convertir un valor de smalldatetime en un valor de datetime.
|
datetimeoffset(n) |
Se copian los componentes de fecha y hora. Se trunca la zona horaria. Cuando la precisión de las fracciones del valor de datetimeoffset(n) es superior a tres dígitos, el valor se truncará. En el ejemplo siguiente se muestran los resultados de convertir un valor datetimeoffset(4) en un valor datetime.
|
datetime2(n) |
Se copian los valores de fecha y hora. Cuando la precisión de las fracciones del valor datetime2(n) es superior a tres dígitos, el valor se truncará. En el siguiente ejemplo se muestran los resultados de convertir un valor datetime2(4) en un valor datetime.
|
Ejemplos
En el ejemplo siguiente se comparan los resultados de convertir una cadena a los tipos de datos date y time.
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.
Tipo de datos |
Salida |
---|---|
time |
12:35:29. 1234567 |
date |
2007-05-08 |
smalldatetime |
2007-05-08 12:35:00 |
datetime |
2007-05-08 12:35:29.123 |
datetime2 |
2007-05-08 12:35:29. 1234567 |
datetimeoffset |
2007-05-08 12:35:29.1234567 +12:15 |