Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Renvoyer le numéro de semaine ISO à partir d'une date dans SQL Server (T-SQL)

Si vous avez besoin d'extraire le numéro de semaine ISO d'une date dans SQL Server, vous pouvez utiliser le iso_week argument lors de l'appel de DATEPART() une fonction. Vous pouvez également utiliser le isowk ou isoww arguments pour faire la même chose.

Par "semaine ISO", je fais référence à la norme de date et d'heure ISO 8601.

Les semaines ISO commencent le lundi et la première semaine d'une année contient le 4 janvier de cette année. Par conséquent, il est possible que les dates de début janvier fassent partie de la 52e ou de la 53e semaine de l'année précédente, et que les dates de fin décembre fassent partie de la première semaine de l'année suivante.

Cela signifie que lorsque vous extrayez le numéro de semaine d'une date, vous pouvez obtenir des résultats différents selon que vous utilisez le calendrier grégorien ou la norme de date et d'heure ISO 8601.

Exemple

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

Résultat :

53

Dans ce cas, la date est le 1er janvier 2021, mais en termes ISO, c'est la 53ème semaine de 2020.

Comparaison avec le grégorien

Voici un autre exemple pour le comparer à la semaine grégorienne.

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

Résultat :

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

On voit donc qu'une même date peut avoir un numéro de semaine différent selon que l'on utilise le calendrier grégorien ou la norme ISO.

Nous pouvons faire la même chose avec une date proche de la fin de l'année précédente.

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

Résultat :

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

Arguments alternatifs

Comme mentionné, peut également utiliser le isowk ou isoww pour renvoyer le numéro de semaine 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;

Résultat :

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