Posteriormente a consultar expertos en este tema, programadores de diversas ramas y maestros hemos dado con la solución al problema y la plasmamos en este post.
Probablemente necesite especificar el primer día de su semana con set datefirst
:
set datefirst 1;
select datepart(week, '2017-02-01');
devoluciones 6
Dependiendo del idioma predeterminado, su datefirst
podría estar configurado para 7
.
set datefirst 7;
select datepart(week, '2017-02-01');
devoluciones 5
demostración de rextester: http://rextester.com/KEPB52852
También puede considerar usar el parámetro ‘iso_week’ en lugar del parámetro ‘week’ en ‘datepart’. En este caso, puede evitar usar ‘set datefirst 1’, lo que puede ser conveniente si solo puede usar una selección única.
Más detalles aquí sobre ‘iso_week’: “ISO 8601 incluye el sistema ISO semana-fecha, un sistema de numeración para semanas. Cada semana está asociada con el año en que ocurre el jueves”
Puedes comparar los dos así:
SELECT datepart(ISO_WEEK, '2020.01.01') -- Wed
SELECT datepart(WEEK, '2020.01.01') -- Wed
SELECT datepart(ISO_WEEK, '2020.01.05') -- Sun
SELECT datepart(WEEK, '2020.01.05') -- Sun
SELECT datepart(ISO_WEEK, '2020.01.06') -- Mon
SELECT datepart(WEEK, '2020.01.06') -- Mon
Tenga en cuenta la diferencia para el domingo 5 de enero de 2020:
-----------
1
1
1
2
2
2
Si haces scroll puedes encontrar las notas de otros desarrolladores, tú también tienes la opción de dejar el tuyo si lo crees conveniente.