DATEPART (Transact-SQL)
Devuelve un entero que representa el objeto datepart especificado del objeto date especificado.
Para obtener información general acerca de todos los tipos de datos y funciones de fecha y hora de Transact-SQL, consulte 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, consulte Usar datos de fecha y hora.
Sintaxis
DATEPART ( datepart , date )
Argumentos
datepart
Es la parte de date (una fecha u hora) para la que se devolverá un integer. En la siguiente tabla se recogen los argumentos válidos de datepart. Los equivalentes de variables definidas por el usuario no son válidos.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
Es una expresión que se puede resolver como un valor time, date, smalldatetime, datetime, datetime2 o datetimeoffset. date puede ser una expresión, una expresión de columna, una variable definida por el usuario o un literal de cadena.Para evitar la ambigüedad, utilice años de cuatro dígitos. Parta obtener información sobre los años de dos dígitos, consulte two digit year cutoff (opción).
Tipo devuelto
int
Valor devuelto
Cada datepart y sus abreviaturas devuelven el mismo valor.
El valor devuelto depende del entorno del idioma definido por SET LANGUAGE y el idioma predeterminado del inicio de sesión. Si date es un literal de cadena para algunos formatos, el valor devuelto depende del formato especificado mediante SET DATEFORMAT. SET DATEFORMAT no afecta al valor devuelto cuando la fecha es una expresión de columna de un tipo de datos de hora o fecha.
En la siguiente 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 tipo de datos del argumento date es datetimeoffset(7). El valor devuelto nanoseconddatepart tiene una escala de 9 (.123456700) y las dos últimas posiciones son siempre 00.
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 |
45 |
weekday, dw |
1 |
hour, hh |
12 |
minute, n |
15 |
second, ss, s |
32 |
millisecond, ms |
123 |
microsecond, mcs |
123456 |
nanosecond, ns |
123456700 |
TZoffset, tz |
310 |
Argumentos de la parte de fecha week y weekday
Si datepart es week (wk, ww) o weekday (dw), el valor devuelto depende del valor que se ha definido mediante SET DATEFIRST.
El 1 de enero de cualquier año define el número inicial de week para datepart; por ejemplo: DATEPART (wk, 'Jan 1, xxxx') = 1, donde xxxx es cualquier año.
En la tabla siguiente se enumeran los valores devueltos para week y weekdaydatepart para '2007-04-21 ' para cada argumento SET DATEFIRST. El 1 de enero es domingo en el año 2007. El 21 de abril es sábado en el año 2007. El valor predeterminado para inglés de EE.UU. es SET DATEFIRST 7, Sunday.
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 mediante DATEPART (year, date), DATEPART (month, date) y DATEPART (day, date) son los mismos que los que devuelven las funciones YEAR, MONTH y DAY, f 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) abarca del lunes 29 de diciembre de 2003 al domingo 4 de enero de 2004. El número de semana más alto en un año puede ser 52 o 53. Este estilo de numeración se utiliza normalmente en los países europeos, pero es poco frecuente en otros países.
Es posible que el sistema de numeración usado en varios países no se ajuste a las normas ISO. Existen por lo menos seis posibilidades, como se muestra en la tabla siguiente
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, 7 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
TZoffset (tz) se devuelve como el número de minutos (con signo). La instrucción siguiente devuelve un ajuste de zona horaria de 310 minutos.
SELECT DATEPART (TZoffset, 2007-05-10 00:00:01.1234567 +05:10);
Si el argumento datepart es TZoffset (tz) y el argumento date no es un tipo de datos datetimeoffset, se devolverá NULL.
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 la datepart especificada, se devolverá el valor predeterminado de datepart.
Por ejemplo, el valor predeterminado de año-mes-día de cualquier tipo de datos date es 1900-01-01. La instrucción siguiente 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');
El valor predeterminado hora-minuto-segundo para el tipo de datos time es 00:00:00. La instrucción siguiente tiene argumentos de la parte de hora para datepart, un argumento de fecha para date y devuelve 0, 0, 0.
SELECT DATEPART(hour, '2007-06-01')
,DATEPART(minute, '2007-06-01')
,DATEPART(second, '2007-06-01');
Fracciones de segundo
Las fracciones de segundo se devuelven como se indica en la instrucción siguiente:
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
Comentarios
Se puede utilizar DATEPART en la lista de selección, cláusulas WHERE, HAVING, GROUP BY y ORDER BY. En SQL Server 2008, DATEPART convierte implícitamente literales de cadena como tipo datetime2. Esto significa que DATEPART ya no admite el formato ADM cuando la fecha se pasa como una cadena. Se debe convertir explícitamente la cadena a un tipo datetime o smalldatetime para utilizar el formato ADM.
Ejemplos
En el ejemplo siguiente se devuelve el año de base. El año de base es útil para calcular fechas. En el ejemplo siguiente, la fecha se especifica como un número. 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 */