Se você precisar extrair o número da semana ISO de uma data no SQL Server, você pode usar o
iso_week
argumento ao chamar o DATEPART()
função. Você também pode usar o isowk
ou isoww
argumentos para fazer a mesma coisa. Por “semana ISO”, estou me referindo ao padrão de data e hora ISO 8601.
As semanas ISO começam às segundas-feiras e a primeira semana de um ano contém 4 de janeiro daquele ano. Portanto, é possível que as datas do início de janeiro façam parte da 52ª ou 53ª semana do ano anterior e as datas do final de dezembro façam parte da primeira semana do ano seguinte.
Isso significa que, ao extrair o número da semana de uma data, você pode obter resultados diferentes, dependendo se estiver usando o calendário gregoriano ou o padrão de data e hora ISO 8601.
Exemplo
DECLARE @date date = '2021-01-01';
SELECT DATEPART(iso_week, @date);
Resultado:
53
Nesse caso, a data é 1º de janeiro de 2021, mas em termos ISO, é a 53ª semana de 2020.
Comparação com gregoriano
Aqui está outro exemplo para compará-lo com a 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 | +--------+------------+
Assim, podemos ver que a mesma data pode ter um número de semana diferente, dependendo se estamos usando o calendário gregoriano ou o padrão ISO.
Podemos fazer a mesma coisa com uma data próxima ao final do ano 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 mencionado, pode alternativamente usar o
isowk
ou isoww
para retornar o número da 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 | +------------+---------+---------+