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 | +------------+---------+---------+