DATEPART (Transact-SQL)
Devuelve un entero que representa el parámetro datepart especificado del parámetro date especificado.
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, consulte Usar datos de fecha y hora.
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 datepartnanosecond 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 |
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 |
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, y 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 (tz) se devuelve como el número de minutos (con signo). La instrucción siguiente devuelve un desfase 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.
Si date es smalldatetime, los segundos se devuelven como 00.
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');
Se puede utilizar DATEPART en las cláusulas de lista de selección, WHERE, HAVING, GROUP BY y ORDER BY. En SQL Server 2008, DATEPART convierte implícitamente los literales de cadena como tipos datetime2. Cuando utilice DATEPART con DATEADD, evite las conversiones implícitas de literales de cadena. Para obtener más información, vea DATEADD (Transact-SQL).
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 */
