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.
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 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 |
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, 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
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.
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
Notas
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).
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 */