DATEPART (Transact-SQL)
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Esta función devuelve un entero que representa el parámetro datepart especificado del parámetro date especificado.
Para obtener una introducción sobre todos los tipos de datos y funciones de fecha y hora de Transact-SQL, vea Tipos de datos y funciones de fecha y hora (Transact-SQL).
Convenciones de sintaxis de Transact-SQL
Sintaxis
DATEPART ( datepart , date )
Argumentos
datepart
La parte específica del argumento date para el que DATEPART
va a devolver un valor integer. En esta tabla se enumeran todos los argumentos válidos de datepart.
Nota
DATEPART
no acepta los equivalentes de variables definidas por el usuario para los argumentos datepart.
datepart | Abreviaturas |
---|---|
year | yy, yyyy |
quarter | qq, q |
month | mm, m |
dayofyear | dy, y |
day | dd, d |
week | wk, ww |
weekday | dw |
hour | hh |
minute | mi, n |
second | ss, s |
millisecond | ms |
microsecond | mcs |
nanosecond | ns |
tzoffset | tz |
iso_week | isowk, isoww |
date
Una expresión que se resuelve en uno de los tipos de datos siguientes:
- date
- datetime
- datetimeoffset
- datetime2
- smalldatetime
- time
Para date, DATEPART
aceptará una expresión de columna, una expresión, un literal de cadena o una variable definida por el usuario. Para evitar problemas de ambigüedad, use años de cuatro dígitos. Vea Establecer la opción de configuración del servidor Fecha límite de año de dos dígitos para obtener información sobre los años de dos dígitos.
Tipo de valor devuelto
int
Valor devuelto
Cada datepart y sus abreviaturas devuelven el mismo valor.
El valor devuelto depende del entorno del idioma definido mediante SET LANGUAGE y la opción de configuración de servidor Configurar el idioma predeterminado del inicio de sesión. El valor devuelto depende de SET DATEFORMAT si date es un literal de cadena de ciertos formatos. SET DATEFORMAT no cambia el valor devuelto cuando la fecha es una expresión de columna de un tipo de datos de hora o fecha.
En esta tabla se enumeran todos los argumentos datepart, con los correspondientes valores devueltos para la instrucción SELECT DATEPART(datepart,'2007-10-30 12:15:32.1234567 +05:10')
. El argumento date tiene un tipo de datos datetimeoffset(7) . Las dos últimas posiciones del valor devuelto datepart nanosecond siempre son 00
y este valor tiene una escala de 9:
0,123456700
datepart | Valor devuelto |
---|---|
year, yyyy, yy | 2007 |
quarter, qq, q | 4 |
month, mm, m | 10 |
dayofyear, dy, y | 303 |
day, dd, d | 30 |
week, wk, ww | 44 |
weekday, dw | 3 |
hour, hh | 12 |
minute, n | 15 |
second, ss, s | 32 |
millisecond, ms | 123 |
microsecond, mcs | 123456 |
nanosecond, ns | 123456700 |
tzoffset, tz | 310 |
iso_week, isowk, isoww | 44 |
Argumentos de la parte de fecha semana y día de la semana
Si datepart es week (wk, ww) o weekday (dw), el valor devuelto de DATEPART
depende del valor establecido mediante SET DATEFIRST.
El 1 de enero de todos los años es el número de inicio para datepart week. Por ejemplo:
DATEPART (wk, "Jan 1, xxxx") = 1
donde xxxx es cualquier año.
En esta tabla se muestran los valores devueltos para datepart week y weekday para "2007-04-21" para cada argumento de SET DATEFIRST. El 1 de enero de 2007 es lunes. El 21 de abril de 2007 es un sábado. Para Inglés de EE.UU.,
SET DATEFIRST 7 -- ( Sunday )
sirve como valor predeterminado. Después de establecer DATEFIRST, use esta instrucción SQL sugerida para los valores de tabla de datepart:
SELECT DATEPART(week, '2007-04-21 '), DATEPART(weekday, '2007-04-21 ')
SET DATEFIRST Argumento |
week devuelto |
weekday devuelto |
---|---|---|
1 | 16 | 6 |
2 | 17 | 5 |
3 | 17 | 4 |
4 | 17 | 3 |
5 | 17 | 2 |
6 | 17 | 1 |
7 | 16 | 7 |
Argumentos de datepart year, month y day
Los valores devueltos para DATEPART (year, date), DATEPART (month, date) y DATEPART (day, date) son los mismos que los que devuelven las funciones YEAR, MONTH y DAY, respectivamente.
iso_week datepart
ISO 8601 incluye el sistema ISO de fecha-semana, un sistema de numeración para las semanas. Cada semana se asocia al año en el que cae el jueves. Por ejemplo, la semana 1 de 2004 (2004W01) abarcaba del lunes 29 de diciembre de 2003 al domingo 4 de enero de 2004. En los países o regiones Europeos normalmente se usa este estilo de numeración. En los países o regiones que no son europeos normalmente no se usa.
Nota: El número más alto de la semana en un año puede ser 52 o 53.
Es posible que los sistemas de numeración que se usan en otros países o regiones no se ajusten a las normas ISO. En esta tabla se muestran seis posibilidades:
Primer día de la semana | La primera semana del año contiene | Semanas asignadas dos veces | Usado por/en |
---|---|---|---|
Domingo | 1 de enero, El primer sábado, 1-7 días del año |
Sí | Estados Unidos |
Lunes | 1 de enero, El primer domingo, 1-7 días del año |
Sí | La mayoría de los países Europeos y Reino Unido |
Lunes | 4 de enero, El primer jueves, 4-7 días del año |
No | ISO 8601, Noruega y Suecia |
Lunes | 7 de enero, El primer lunes, Siete días del año |
No | |
Miércoles | 1 de enero, El primer martes, 1-7 días del año |
Sí | |
Sábado | 1 de enero, El primer viernes, 1-7 días del año |
Sí |
tzoffset
DATEPART
devuelve el valor tzoffset (tz) como el número de minutos (con signo). Esta instrucción devuelve un desplazamiento de zona horaria de 310 minutos:
SELECT DATEPART (tzoffset, '2007-05-10 00:00:01.1234567 +05:10');
DATEPART
representa el valor tzoffset de esta forma:
- Para datetimeoffset y datetime2, tzoffset devuelve el desplazamiento de tiempo en minutos, donde el desplazamiento de datetime2 siempre es 0 minutos.
- Para los tipos de datos que se pueden convertir implícitamente en datetimeoffset o datetime2,
DATEPART
devuelve el desplazamiento de tiempo en minutos. Excepción: otros tipos de datos de fecha y hora. - El resto de tipos de parámetros producirán un error.
Argumento date smalldatetime
Para un valor date smalldatetime, DATEPART
devuelve los segundos como 00.
Valor predeterminado devuelto por una parte de fecha que no se encuentra en un argumento date
Si el tipo de datos del argumento date no contiene el parámetro datepart especificado, DATEPART
devolverá el valor predeterminado para ese parámetro datepart solo cuando se especifique un valor literal para date.
Por ejemplo, el valor predeterminado de año-mes-día de cualquier tipo de datos date es 1900-01-01. Esta instrucción tiene argumentos de la parte de fecha para datepart, un argumento de hora para date y devuelve 1900, 1, 1, 1, 2
.
SELECT DATEPART(year, '12:10:30.123')
,DATEPART(month, '12:10:30.123')
,DATEPART(day, '12:10:30.123')
,DATEPART(dayofyear, '12:10:30.123')
,DATEPART(weekday, '12:10:30.123');
Si date se especifica como variable o columna de tabla, y el tipo de datos de esa variable o columna no tiene especificado datepart, DATEPART
devuelve el error 9810. En este ejemplo, la variable @t tiene un tipo de datos time. Se produce un error en el ejemplo porque el año de la parte de fecha no es válido para el tipo de datos time:
DECLARE @t time = '12:10:30.123';
SELECT DATEPART(year, @t);
Fracciones de segundo
En estas instrucciones se muestra que DATEPART
devuelve las fracciones de segundo:
SELECT DATEPART(millisecond, '00:00:01.1234567'); -- Returns 123
SELECT DATEPART(microsecond, '00:00:01.1234567'); -- Returns 123456
SELECT DATEPART(nanosecond, '00:00:01.1234567'); -- Returns 123456700
Observaciones
DATEPART
se puede usar en las cláusulas SELECT list, WHERE, HAVING, GROUP BY y ORDER BY.
DATEPART convierte de forma implícita los literales de cadena como un tipo datetime2 en SQL Server 2008 (10.0.x) y versiones posteriores. Esto significa que DATENAME no admite el formato año-día-mes cuando se pasa la fecha como cadena. La cadena se debe convertir explícitamente a un tipo datetime o smalldatetime para poder usar el formato año-día-mes.
Ejemplos
En este ejemplo se devuelve el año base. El año base ayuda con los cálculos de fecha. En el ejemplo, un número especifica la fecha. Observe que SQL Server interpreta 0 como el 1 de enero de 1900.
SELECT DATEPART(year, 0), DATEPART(month, 0), DATEPART(day, 0);
-- Returns: 1900 1 1
En este ejemplo se devuelve el día de la fecha 12/20/1974
.
-- Uses AdventureWorks
SELECT TOP(1) DATEPART (day,'12/20/1974') FROM dbo.DimCustomer;
-- Returns: 20
En este ejemplo se devuelve el año de la fecha 12/20/1974
.
-- Uses AdventureWorks
SELECT TOP(1) DATEPART (year,'12/20/1974') FROM dbo.DimCustomer;
-- Returns: 1974