sql >> Base de Datos >  >> RDS >> Sqlserver

Devuelve el número de semana ISO de una fecha en SQL Server (T-SQL)

Si necesita extraer el número de semana ISO de una fecha en SQL Server, puede usar iso_week argumento al llamar al DATEPART() función. Alternativamente, puede usar el isowk o isoww argumentos para hacer lo mismo.

Por "semana ISO", me refiero al estándar de fecha y hora ISO 8601.

Las semanas ISO comienzan los lunes y la primera semana de un año contiene el 4 de enero de ese año. Por lo tanto, es posible que las fechas de principios de enero formen parte de la semana 52 o 53 del año anterior y que las fechas de finales de diciembre formen parte de la primera semana del año siguiente.

Esto significa que cuando extrae el número de semana de una fecha, puede obtener diferentes resultados dependiendo de si está utilizando el calendario gregoriano o el estándar de fecha y hora ISO 8601.

Ejemplo

DECLARE @date date = '2021-01-01';
SELECT DATEPART(iso_week, @date);

Resultado:

53

En este caso, la fecha es el 1 de enero de 2021, pero en términos ISO, es la semana 53 de 2020.

Comparación con gregoriano

Aquí hay otro ejemplo para compararlo con la semana gregoriana.

DECLARE @date date = '2021-01-01';
SELECT 
  DATEPART(week, @date) AS week,
  DATEPART(iso_week, @date) AS iso_week;

Resultado:

+--------+------------+
 | week   | iso_week   |
 |--------+------------|
 | 1      | 53         |
 +--------+------------+ 

Entonces podemos ver que la misma fecha puede tener un número de semana diferente dependiendo de si estamos usando el calendario gregoriano o el estándar ISO.

Podemos hacer lo mismo con una fecha cercana al final del año anterior.

DECLARE @date date = '2020-12-27';
SELECT 
  DATEPART(week, @date) AS week,
  DATEPART(iso_week, @date) AS iso_week;

Resultado:

+--------+------------+
 | week   | iso_week   |
 |--------+------------|
 | 53     | 52         |
 +--------+------------+ 

Argumentos alternativos

Como se mencionó, alternativamente puede usar el isowk o isoww para devolver el número de semana ISO.

DECLARE @date date = '2021-01-01';
SELECT 
    DATEPART(iso_week, @date) AS iso_week,
    DATEPART(isowk, @date) AS isowk,
    DATEPART(isoww, @date) AS isoww;

Resultado:

+------------+---------+---------+
 | iso_week   | isowk   | isoww   |
 |------------+---------+---------|
 | 53         | 53      | 53      |
 +------------+---------+---------+