date (Transact-SQL)
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Punto de conexión de análisis SQL en Microsoft Fabric Almacenamiento en Microsoft Fabric
Define una fecha en SQL Server. El tipo de datos date se introdujo en SQL Server 2008 (10.0.x).
Descripción de date
Propiedad | Value |
---|---|
Sintaxis | DATE |
Uso | DECLARE @MyDate DATE CREATE TABLE Table1 (Column1 DATE) |
Formato de literal de cadena predeterminado (se usa para el cliente de nivel inferior) |
yyyy-MM-dd Para obtener más información, consulte la sección Compatibilidad con versiones anteriores de clientes de niveles inferiores. |
Intervalo | 0001-01-01 a 9999-12-31 (1582-10-15 a 9999-12-31 para 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) |
Intervalos de elementos | yyyy es una cifra de cuatro dígitos comprendida entre 0001 y 9999 que representa un año. Informatica limita yyyy al intervalo de 1582 a 9999 .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. |
Longitud en caracteres | 10 posiciones |
Precisión, escala | 10, 0 |
Tamaño de almacenamiento | 3 bytes, fijo |
Estructura de almacenamiento | un entero de 3 bytes almacena date |
Precisión | Un día |
Valor predeterminado | 1900-01-01 Este valor se usa para la parte de fecha anexada para la conversión implícita de time a datetime2 o datetimeoffset. |
Calendario | Gregoriano |
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 de literales de cadena compatibles para date
En las listas siguientes se muestran los formatos literales de cadena válidos para el tipo de datos date .
[m]m
, dd
y [yy]yy
representan el mes, el día y el año en una cadena con marcas de barra diagonal (/
), guiones (-
) o puntos (.
) como separadores.
Solo se admiten los años de dos o cuatro dígitos. Siempre que sea posible utilice los años de cuatro dígitos. Para especificar un entero de 0001
a 9999
que representa el año límite para interpretar los años de dos dígitos como años de cuatro dígitos, use la opción de configuración del servidor límite de año de dos dígitos.
Para Informatica, yyyy
está limitado al intervalo 1582
a 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. 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. Por ejemplo, si el valor del año límite de dos dígitos es el valor predeterminado 2049
, 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
.
La configuración de idioma actual determina el formato de fecha predeterminado. Para cambiar el formato de fecha, use las instrucciones SET LANGUAGE y SET DATEFORMAT.
No se admite el formato ydm
para date.
Formatos literales de cadena para el mes-día-año
SET DATEFORMAT mdy;
[m]m/dd/[yy]yy
[m]m-dd-[yy]yy
Formatos literales de cadena para mes-año-día
SET DATEFORMAT myd;
[m]m/[yy]yy/dd
[m]m-[yy]yy-dd
[m]m.[yy]yy.dd
Formatos literales de cadena para day-month-year
SET DATEFORMAT dmy;
dd/[m]m/[yy]yy
dd-[m]m-[yy]yy
dd.[m]m.[yy]yy
Formatos literales de cadena para day-year-month
SET DATEFORMAT dym;
dd/[yy]yy/[m]m
dd-[yy]yy-[m]m
dd.[yy]yy.[m]m
Formatos literales de cadena para año-mes-día
SET DATEFORMAT ymd;
[yy]yy/[m]m/dd
[yy]yy-[m]m-dd
[yy]yy-[m]m-dd
Lista alfabética de formatos
[dd] mon[,] yyyy
dd mon[,][yy]yy
dd [yy]yy mon
[dd] yyyy mon
mon [dd][,] yyyy
mon dd[,] [yy]
mon yyyy [dd]
yyyy mon [dd]
yyyy [dd] mon
mon
representa el nombre completo del mes o la abreviatura del mes en el idioma actual. Las comas son opcionales y se omite el uso de mayúsculas.
Para evitar ambigüedades, use años de cuatro dígitos.
Si falta el día, se usará el primer día del mes.
Lista iso 8601 de formatos
yyyy-MM-dd
yyyyMMdd
Igual que el estándar SQL. Este es el único formato que se define como estándar internacional.
Lista sin separar de formatos
[yy]yyMMdd
yyyy[MMdd]
Los datos de tipo date se pueden especificar con cuatro, seis u ocho dígitos. Una cadena de seis u ocho dígitos se interpreta siempre como ymd
. El mes y el día deben ser siempre de dos dígitos. Una cadena de cuatro dígitos se interpreta como el año.
Formato de fecha ODBC
{ d 'yyyy-MM-dd' }
Específico de la API de ODBC.
Formato de fecha XML W3C
yyyy-MM-ddTZD
Se admite para el uso de XML y SOAP.
TZD
es el designador de zona horaria (Z
, +hh:mm
o -hh:mm
):
hh:mm
representa el desplazamiento de zona horaria.hh
es una cifra de dos dígitos, de0
a14
, que representa el número de horas del ajuste de zona horaria.mm
es una cifra de dos dígitos, de0
a59
, que representa el número de minutos adicionales en el ajuste de zona horaria.+
(más) o-
(menos) es el signo que se usa obligatoriamente para indicar el desplazamiento de zona horaria. 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. El intervalo válido de ajuste de zona horaria es de-14:00
a+14:00
.
Compatibilidad con ANSI e ISO 8601
date cumple la definición del estándar ANSI SQL para el calendario Gregoriano:
Los tipos de datos datetime permiten almacenar fechas en formato gregoriano en el intervalo de fechas 0001-01-01 CE a 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 yyyy-MM-dd
. Este formato es igual que la definición de ISO 8601 para 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.).
Compatibilidad con versiones anteriores de clientes de niveles inferiores
Algunos clientes de nivel inferior no admiten los tipos de datos time, date, datetime2 y datetimeoffset. En la tabla siguiente se muestra la asignación de tipo entre una instancia de nivel superior de SQL Server y los clientes de nivel inferior.
Tipo de datos de SQL Server | El formato del literal de cadena predeterminado se pasó al cliente de nivel inferior | ODBC de nivel inferior | OLEDB de nivel inferior | JDBC de nivel inferior | SQLCLIENT de nivel inferior |
---|---|---|---|---|---|
time | hh:mm:ss[.nnnnnnn] |
SQL_WVARCHAR o SQL_VARCHAR |
DBTYPE_WSTR o DBTYPE_STR |
Java.sql.String |
String o SqString |
date | yyyy-MM-dd |
SQL_WVARCHAR o SQL_VARCHAR |
DBTYPE_WSTR o DBTYPE_STR |
Java.sql.String |
String o SqString |
datetime2 | yyyy-MM-dd HH:mm:ss[.nnnnnnn] |
SQL_WVARCHAR o SQL_VARCHAR |
DBTYPE_WSTR o DBTYPE_STR |
Java.sql.String |
String o SqString |
datetimeoffset | yyyy-MM-dd HH:mm:ss[.nnnnnnn] [+ or -]hh:mm |
SQL_WVARCHAR o SQL_VARCHAR |
DBTYPE_WSTR o DBTYPE_STR |
Java.sql.String |
String o SqString |
Convierte datos de fecha y hora
Cuando se realiza la conversión 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 sobre el uso de las CAST
funciones y con datos de fecha y hora, consulte CAST y CONVERT
CONVERT.
Convertir tipos date a otros tipos de fecha y hora
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.
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.
Si la conversión es a datetime, se copia el componente de fecha. En el código siguiente se muestran los resultados de convertir un valor date en un valor datetime.
DECLARE @date AS DATE = '12-10-25';
DECLARE @datetime AS DATETIME = @date;
SELECT @date AS '@date',
@datetime AS '@datetime';
Este es el conjunto de resultados.
@date @datetime
---------- -----------------------
2025-12-10 2025-12-10 00:00:00.000
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
. Cuando el valor date está fuera del rango de un valor smalldatetime, se produce el mensaje de error 242 y el valor smalldatetime se establece en NULL
:
La conversión del tipo de datos date en tipos de datos smalldatetime produjo un valor fuera de intervalo.
En el código siguiente se muestran los resultados de convertir un valor date en un valor smalldatetime.
DECLARE @date AS DATE = '1912-10-25';
DECLARE @smalldatetime AS SMALLDATETIME = @date;
SELECT @date AS '@date',
@smalldatetime AS '@smalldatetime';
Este es el conjunto de resultados.
@date @smalldatetime
---------- -------------------
1912-10-25 1912-10-25 00:00:00
Cuando la conversión es a datetimeoffset(n), se copia la fecha y la hora se establece en 00:00.0000000 +00:00
. En el código siguiente se muestran los resultados de convertir un valor date en un valor datetimeoffset(3).
DECLARE @date AS DATE = '1912-10-25';
DECLARE @datetimeoffset AS DATETIMEOFFSET (3) = @date;
SELECT @date AS '@date',
@datetimeoffset AS '@datetimeoffset';
Este es el conjunto de resultados.
@date @datetimeoffset
---------- ------------------------------
1912-10-25 1912-10-25 00:00:00.000 +00:00
Cuando la conversión es a datetime2(n), se copia el componente de fecha y el componente de hora se establece en 00:00.000000
. En el código siguiente se muestran los resultados de convertir un valor date en un valor datetime2(3).
DECLARE @date AS DATE = '1912-10-25';
DECLARE @datetime2 AS DATETIME2 (3) = @date;
SELECT @date AS '@date',
@datetime2 AS '@datetime2(3)';
Este es el conjunto de resultados.
@date @datetime2(3)
---------- -----------------------
1912-10-25 1912-10-25 00:00:00.000
Convertir literales de cadena en fechas
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. En caso contrario, se generará un error en el tiempo de ejecución. Las conversiones implícitas o explícitas que no especifican un estilo (desde tipos de fecha y hora hasta literales de cadena) están en el formato predeterminado de la sesión actual. En esta tabla se muestran las reglas para convertir un literal de cadena al tipo de datos date.
Literal de cadena de entrada | date |
---|---|
DATE de ODBC | Los literales de cadena de ODBC se asignan al tipo de datos datetime. 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. |
TIME de ODBC | Vea la regla anterior de DATE de ODBC. |
DATETIME DE ODBC | Vea la regla anterior de DATE de ODBC. |
Solo DATE | Trivial |
Solo TIME | Se proporcionan los valores predeterminados. |
Solo TIMEZONE | Se proporcionan los valores predeterminados. |
DATE + TIME | Se usa la parte DATE de la cadena de entrada. |
DATE + TIMEZONE | No permitido. |
TIME + TIMEZONE | Se proporcionan los valores predeterminados. |
DATE + TIME + TIMEZONE | Se usa la parte DATE de DATETIME local. |
Ejemplos
En el siguiente ejemplo se comparan los resultados de convertir una cadena a cada tipo de datos date y time.
SELECT CAST ('2022-05-08 12:35:29.1234567 +12:15' AS TIME (7)) AS 'time',
CAST ('2022-05-08 12:35:29.1234567 +12:15' AS DATE) AS 'date',
CAST ('2022-05-08 12:35:29.123' AS SMALLDATETIME) AS 'smalldatetime',
CAST ('2022-05-08 12:35:29.123' AS DATETIME) AS 'datetime',
CAST ('2022-05-08 12:35:29.1234567 +12:15' AS DATETIME2 (7)) AS 'datetime2',
CAST ('2022-05-08 12:35:29.1234567 +12:15' AS DATETIMEOFFSET (7)) AS 'datetimeoffset';
Este es el conjunto de resultados.
Tipo de datos | Output |
---|---|
time | 12:35:29.1234567 |
date | 2022-05-08 |
smalldatetime | 2022-05-08 12:35:00 |
datetime | 2022-05-08 12:35:29.123 |
datetime2 | 2022-05-08 12:35:29.1234567 |
datetimeoffset | 2022-05-08 12:35:29.1234567 +12:15 |