Compartir vía


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
Estados Unidos
Lunes 1 de enero,

El primer domingo,

1-7 días del año
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ábado 1 de enero,

El primer viernes,

1-7 días del año

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

Consulte también

CAST y CONVERT (Transact-SQL)DATETRUNC