Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Restituisce il numero della settimana ISO da una data in SQL Server (T-SQL)

Se devi estrarre il numero della settimana ISO da una data in SQL Server, puoi utilizzare iso_week argomento quando si chiama DATEPART() funzione. In alternativa puoi usare isowk o isoww argomenti per fare la stessa cosa.

Con "Settimana ISO", mi riferisco allo standard di data e ora ISO 8601.

Le settimane ISO iniziano il lunedì e la prima settimana di un anno contiene il 4 gennaio di quell'anno. Pertanto, è possibile che le date di inizio gennaio facciano parte della 52a o 53a settimana dell'anno precedente e che le date di fine dicembre facciano parte della prima settimana dell'anno successivo.

Ciò significa che quando estrai il numero della settimana da una data, potresti ottenere risultati diversi a seconda che tu stia utilizzando il calendario gregoriano o lo standard di data e ora ISO 8601.

Esempio

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

Risultato:

53

In questo caso, la data è il 1 gennaio 2021, ma in termini ISO è la 53a settimana del 2020.

Confronto con gregoriano

Ecco un altro esempio per confrontarlo con la settimana gregoriana.

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

Risultato:

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

Quindi possiamo vedere che la stessa data può avere un numero di settimana diverso a seconda che utilizziamo il calendario gregoriano o lo standard ISO.

Possiamo fare la stessa cosa con una data vicina alla fine dell'anno precedente.

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

Risultato:

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

Argomenti alternativi

Come accennato, in alternativa può utilizzare il isowk o isoww per restituire il numero della settimana 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;

Risultato:

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