date (Transact-SQL)date (Transact-SQL)

SE APLICA A: síSQL Server (a partir de 2008) síAzure SQL Database síAzure SQL Data Warehouse síAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Define una fecha en SQL ServerSQL Server.Defines a date in SQL ServerSQL Server.

Descripción de datedate description

PropiedadProperty ValorValue
SintaxisSyntax datedate
UsoUsage DECLARE @MyDate dateDECLARE @MyDate date

CREATE TABLE Table1 ( Column1 date )CREATE TABLE Table1 ( Column1 date )
Formato de literal de cadena predeterminadoDefault string literal format

(se usa para el cliente de nivel inferior)(used for down-level client)
YYYY-MM-DDYYYY-MM-DD

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.
IntervaloRange De 0001-01-01 a 9999-12-31 (de 1582-10-15 a 9999-12-31 para Informatica)0001-01-01 through 9999-12-31 (1582-10-15 through 9999-12-31 for Informatica)

Del 1 de enero del año 1 E. C. al 31 de diciembre de 9999 E. C. (del 15 de octubre de 1582 E. C. al 31 de diciembre de 9999 E. C. para Informatica)January 1, 1 CE (Common Era) through December 31, 9999 CE (October 15, 1582 CE through December 31, 9999 CE for Informatica)
Intervalos de elementosElement ranges YYYY es una cifra de cuatro dígitos comprendida entre 0001 y 9999 que representa un año.YYYY is four digits from 0001 to 9999 that represent a year. Para Informatica, YYYY se limita al intervalo entre 1582 y 9999.For Informatica, YYYY is limited to the range 1582 to 9999.

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 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 from 01 to 31, depending on the month, that represents a day of the specified month.
Longitud en caracteresCharacter length 10 posiciones10 positions
Precisión, escalaPrecision, scale 10, 010, 0
Tamaño de almacenamientoStorage size 3 bytes, fijo3 bytes, fixed
Estructura de almacenamientoStorage structure 1, fecha de almacenes de enteros de 3 bytes.1, 3-byte integer stores date.
PrecisiónAccuracy Un díaOne day
Valor predeterminadoDefault value 1900-01-011900-01-01

Este valor se usa para la parte de fecha anexada para la conversión implícita de time a datetime2 o datetimeoffset.This value is used for the appended date part for implicit conversion from time to datetime2 or datetimeoffset.
CalendarioCalendar GregorianoGregorian
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 de literales de cadena compatibles para dateSupported string literal formats for date

En las tablas siguientes se muestran los formatos de literales de cadena válidos para el tipo de datos date.The following tables show the valid string literal formats for the date data type.

NuméricoNumeric DescripciónDescription
mdymdy

[m]m/dd/[aa]aa[m]m/dd/[yy]yy

[m]m-dd-[aa]aa[m]m-dd-[yy]yy

[m]m.dd.[aa]aa[m]m.dd.[yy]yy

madmyd

mm/[aa]aa/ddmm/[yy]yy/dd

mm-[aa]aa/ddmm-[yy]yy/dd

[m]m.[aa]aa.dd[m]m.[yy]yy.dd

dmadmy

dd/[m]m/[aa]aadd/[m]m/[yy]yy

dd-[m]m-[aa]aadd-[m]m-[yy]yy

dd.[m]m.[aa]aadd.[m]m.[yy]yy

damdym

dd/[aa]aa/[m]mdd/[yy]yy/[m]m

dd-[aa]aa-[m]mdd-[yy]yy-[m]m

dd.[aa]aa.[m]mdd.[yy]yy.[m]m

amdymd

[aa]aa/[m]m/dd[yy]yy/[m]m/dd

[aa]aa-[m]m-dd[yy]yy-[m]m-dd

[aa]aa-[m]m-dd[yy]yy-[m]m-dd
[m]m, dd, y [aa]aa representan el mes, el día y el año en una cadena con marcas de barra diagonal (/), guiones (-) o puntos (.) como separadores.[m]m, dd, and [yy]yy represent month, day, and year in a string with slash marks (/), hyphens (-), or periods (.) as separators.

Solo se admiten los años de dos o cuatro dígitos.Only four- or two-digit years are supported. Siempre que sea posible utilice los años de cuatro dígitos.Use four-digit years whenever possible. Use la opción Fecha límite de año de dos dígitos (vea Establecer la opción de configuración del servidor Fecha límite de año de dos dígitos) para especificar un número entero entre 0001 y 9999 que represente el año límite para interpretar años de dos dígitos como años de cuatro dígitos.To specify an integer from 0001 to 9999 that represents the cutoff year for interpreting two-digit years as four-digit years, use the Configure the two digit year cutoff Server Configuration Option.

Nota:Note! Para Informatica, YYYY se limita al intervalo entre 1582 y 9999.For Informatica, YYYY is limited to the range 1582 to 9999.

Un año de dos dígitos menor o igual que los últimos dos dígitos del año límite pertenece al mismo siglo que el año límite.A two-digit year that is less than or equal to the last two digits of the cutoff year is in the same century as the cutoff year. Un año de dos dígitos mayor que los últimos dos dígitos del año límite pertenece al siglo anterior al año límite.A two-digit year greater than the last two digits of the cutoff year is in the century that comes before the cutoff year. Por ejemplo, si el valor del año límite de dos dígitos es 2049 (el valor predeterminado), el año de dos dígitos 49 se interpreta como 2049 y el año de dos dígitos 50 se interpreta como 1950.For example, if the two-digit year cutoff is the default 2049, the two-digit year 49 is interpreted as 2049 and the two-digit year 50 is interpreted as 1950.

La configuración de idioma actual está determinada por el formato de fecha predeterminado.The default date format is determined by the current language setting. Para cambiar el formato de fecha, use las instrucciones SET LANGUAGE y SET DATEFORMAT.You can change the date format by using the SET LANGUAGE and SET DATEFORMAT statements.

No se admite el formato ydm para date.The ydm format isn't supported for date.
AlfabéticoAlphabetical DescripciónDescription
mes [dd][,] aaaamon [dd][,] yyyy

mes dd[,] [aamon dd[,] [yy

mes aaaa [dd]mon yyyy [dd]

[dd] mes[,] aaaa[dd] mon[,] yyyy

dd mes[,][aa]aadd mon[,][yy]yy

dd [aa]aa mesdd [yy]yy mon

[dd] aaaa mes[dd] yyyy mon

aaaa mes [dd]yyyy mon [dd]

aaaa [dd] mesyyyy [dd] mon
mes representa el nombre completo del mes o la abreviatura del mes en el idioma actual.mon represents the full month name or the month abbreviation given in the current language. Las comas son opcionales y se omite el uso de mayúsculas.Commas are optional and capitalization is ignored.

Para evitar ambigüedades, use años de cuatro dígitos.To avoid ambiguity, use four-digit years.

Si falta el día, se usará el primer día del mes.If the day is missing, the first day of the month is supplied.
ISO 8601ISO 8601 DescripciónDescription
YYYY-MM-DDYYYY-MM-DD

YYYYMMDDYYYYMMDD
Igual que el estándar SQL.Same as the SQL standard. Este es el único formato que se define como estándar internacional.This format is the only format defined as an international standard.
Sin separaciónUnseparated DescripciónDescription
[aa]aammdd[yy]yymmdd

aaaa[mm][dd]yyyy[mm][dd]
Los datos de tipo date se pueden especificar con cuatro, seis u ocho dígitos.The date data can be specified with four, six, or eight digits. Una cadena de seis u ocho dígitos se interpreta siempre como amd.A six- or eight-digit string is always interpreted as ymd. El mes y el día deben ser siempre de dos dígitos.The month and day must always be two digits. Una cadena de cuatro dígitos se interpreta como el año.A four-digit string is interpreted as year.
ODBCODBC DescripciónDescription
{ d 'aaaa-mm-dd' }{ d 'yyyy-mm-dd' } Específico de la API de ODBC.ODBC API specific.
Formato W3C XMLW3C XML format DescripciónDescription
aaaa-mm-ddTZDyyyy-mm-ddTZD Se admite para el uso de XML y SOAP.Supported for XML/SOAP usage.

DZH es el designador de zona horaria (Z o + hh: mm o -hh:mm).TZD is the time zone designator (Z or +hh:mm or -hh:mm):

- hh:mm representa el desplazamiento de zona horaria.- hh:mm represents the time zone offset. hh es una cifra de dos dígitos, de 0 a 14, que representa el número de horas del ajuste de zona horaria.hh is two digits, ranging from 0 to 14, that represent the number of hours in the time zone offset.
- MM es una cifra de dos dígitos, de 0 a 59, que representa el número de minutos adicionales en el desplazamiento de zona horaria.- MM is two digits, ranging from 0 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 el desplazamiento de zona horaria.- + (plus) or - (minus) the mandatory sign of the time zone offset. Este signo indica que, para obtener la hora local, el desplazamiento de zona horaria se suma a la hora UTC (Hora universal coordinada) o se resta de ella.This sign indicates that, to obtain the local time, the time zone offset is added or subtracted from the Coordinated Universal Times (UTC) 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.

Compatibilidad con ANSI e ISO 8601ANSI and ISO 8601 compliance

date cumple la definición del estándar ANSI SQL para el calendario Gregoriano: "NOTA 85: Los tipos de datos datetime permitirán que las fechas en el formato Gregoriano se almacenen en el intervalo de fechas de 01-01-0001 CE a 12-31-9999 CE".date complies with the ANSI SQL standard definition for the Gregorian calendar: "NOTE 85 - Datetime data types will allow dates in the Gregorian format to be stored in the date range 0001-01-01 CE through 9999-12-31 CE."

El formato predeterminado del literal de cadena (que se usa para clientes de nivel inferior) cumple con el formato del estándar SQL, que se define como AAAA-MM-DD.The default string literal format, which is used for down-level clients, complies with the SQL standard form that is defined as YYYY-MM-DD. Este formato es igual que la definición de ISO 8601 para DATE.This format is the same as the ISO 8601 definition for DATE.

Nota

Para Informatica, el intervalo está comprendido entre 1582-10-15 (15 de octubre de 1582 E. C.) y 9999-12-31 31 de diciembre de 9999 E. C.).For Informatica, the range is limited to 1582-10-15 (October 15, 1582 CE) to 9999-12-31 (December 31, 9999 CE).

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 don't 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 realiza la conversión 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 doesn'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 tipos date a otros tipos de fecha y horaConverting date to other date and time types

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

Cuando es una conversión a time(n), se produce un error en la conversión y se muestra el mensaje de error 206: "Conflicto de tipos de operandos: date es incompatible con time".When the conversion is to time(n), the conversion fails, and error message 206 is raised: "Operand type clash: date is incompatible with time".

Si la conversión es a datetime, se copia la fecha.If the conversion is to datetime, date is copied. 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-10-25';  
DECLARE @datetime datetime= @date;  
  
SELECT @date AS '@date', @datetime AS '@datetime';  
  
--Result  
--@date      @datetime  
------------ -----------------------  
--2025-12-10 2025-12-10 00:00:00.000  
--  
--(1 row(s) affected)  

Cuando la conversión es a smalldatetime y el valor date se encuentra en el intervalo de smalldatetime, el componente de fecha se copia y el componente de hora se establece en 00:00:00.000.When the conversion is to smalldatetime, the date value is in the range of a smalldatetime, the date component is copied, and the time component is set to 00:00:00.000. Cuando el valor date está fuera del rango de un valor smalldatetime, se produce el mensaje de error 242: "La conversión de un tipo de datos date a un tipo de datos smalldatetime da como resultado un valor que no se encuentra dentro del intervalo"; y el valor smalldatetime se establece en NULL.When the date value is outside the range of a smalldatetime value, error message 242 is raised: "The conversion of a date data type to a smalldatetime data types resulted in an out-of-range value."; and the smalldatetime value is set to NULL. En el código siguiente se muestran los resultados de convertir un valor date en un valor smalldatetime.The following code shows the results of converting a date value to a smalldatetime value.

DECLARE @date date= '1912-10-25';  
DECLARE @smalldatetime smalldatetime = @date;  
  
SELECT @date AS '@date', @smalldatetime AS '@smalldatetime';  
  
--Result  
--@date      @smalldatetime  
------------ -----------------------  
--1912-10-25 1912-10-25 00:00:00  
--  
--(1 row(s) affected)  

Cuando la conversión es a datetimeoffset(n), se copia la fecha y la hora se establece en 00:00.0000000 +00:00.For conversion to datetimeoffset(n), date is copied, and the time is set to 00:00.0000000 +00:00. En el código siguiente se muestran los resultados de convertir un valor date en un valor datetimeoffset(3).The following code shows the results of converting a date value to a datetimeoffset(3) value.

DECLARE @date date = '1912-10-25';  
DECLARE @datetimeoffset datetimeoffset(3) = @date;  
  
SELECT @date AS '@date', @datetimeoffset AS '@datetimeoffset';  
  
--Result  
--@date      @datetimeoffset  
------------ ------------------------------  
--1912-10-25 1912-10-25 00:00:00.000 +00:00  
--  
--(1 row(s) affected)  

Cuando la conversión es a datetime2(n), se copia el componente de hora y el componente de fecha se establece en 00:00.000000.When the conversion is to datetime2(n), the date component is copied, and the time component is set to 00:00.000000. En el código siguiente se muestran los resultados de convertir un valor date en un valor datetime2(3).The following code shows the results of converting a date value to a datetime2(3) value.

DECLARE @date date = '1912-10-25'  
DECLARE @datetime2 datetime2(3) = @date;  
  
SELECT @date AS '@date', @datetime2 AS '@datetime2(3)';  
  
--Result  
--@date      @datetime2(3)  
------------ -----------------------  
--1912-10-25 1912-10-25 00:00:00.000  
--  
--(1 row(s) affected)  

Convertir literales de cadena en fechasConverting string literals to date

Las conversiones de literales de cadena a 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 allowed 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 don't 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 date.The following table shows the rules for converting a string literal to the date data type.

Literal de cadena de entradaInput string literal datedate
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 un tipo date provoca una conversión implícita entre datetime y el tipo que definen las reglas de conversión.Any assignment operation from ODBC DATETIME literals into a date type causes an implicit conversion between datetime and the type that the conversion rules define.
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 TrivialTrivial
Solo TIMETIME only Se proporcionan los valores predeterminados.Default values are supplied.
Solo TIMEZONETIMEZONE only Se proporcionan los valores predeterminados.Default values are supplied.
DATE + TIMEDATE + TIME Se usa la parte DATE de la cadena de entrada.The DATE part of the input string is used.
DATE + TIMEZONEDATE + TIMEZONE No permitido.Not allowed.
TIME + TIMEZONETIME + TIMEZONE Se proporcionan los valores predeterminados.Default values are supplied.
DATE + TIME + TIMEZONEDATE + TIME + TIMEZONE Se usará la parte DATE de DATETIME local.The DATE part of local DATETIME will be used.

EjemplosExamples

En el ejemplo siguiente se comparan los resultados de convertir una cadena a cada tipo de datos de fecha y hora.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)