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.

Para obtener información general acerca de todos los tipos de datos y funciones de fecha y hora de Transact-SQL, consulte Tipos de datos y funciones de fecha y hora (Transact-SQL). Para obtener información y ejemplos que son comunes a los tipos de datos y funciones de fecha y hora, vea Usar datos de fecha y hora.

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 desplazamiento 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 desplazamiento de la 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:

  • número separador número separador número [hora] [hora]

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:

  • Incluya los datos de fecha y hora entre comillas simples ('). Para los idiomas distintos de inglés, utilice N'

  • Los caracteres que se incluyen entre corchetes son opcionales.

  • Si sólo especifica los dos últimos dígitos del año, los valores inferiores a los dos últimos dígitos del valor de la opción de configuración Fecha límite de año de dos dígitos pertenecen al mismo siglo que el año límite. Los valores mayores o iguales que el valor de esta opción pertenecen al siglo anterior al año límite. 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. Para evitar la ambigüedad, utilice años de cuatro dígitos.

  • Si falta el día, se usará el primer día del mes.

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]

AAAAMMDDThh:mm:ss[.mmm]

Ejemplos:

  • 2004-05-23T14:25:10

  • 2004-05-23T14:25:10.487

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 los parámetros 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 hora 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 hora de ODBC tienen el formato: { literal_type 'constant_value' }:

  • literal_type especifica el tipo de la secuencia de escape. Las marcas de hora tienen tres especificadores literal_type:

    • d = sólo fecha

    • t = sólo hora

    • ts = marca de hora (hora + fecha)

  • 'constant_value' es el valor de la secuencia de escape. constant_value debe seguir estos formatos para cada literal_type.

    literal_typeformato constant_value
    d aaaa-mm-dd
    t hh:mm:ss[.fff]
    ts aaaa-mm-dd hh:mm:ss[.fff]

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 compatible con ANSI ni con ISO 8601.

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

Éste es el conjunto de resultados.

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

Vea también

Referencia