Saltar al contenido

Semana ISO vs Semana SQL Server

Solución:

Cuando SQL Server implementó por primera vez el WEEK fecha / parte, tenían que hacer una elección. No creo que hubiera mucha conciencia al respecto, excepto para alinearse con el estándar más común en ese momento; recuerde que esto fue en un momento en el que cumplir con los estándares no era una prioridad máxima (de lo contrario, no tendríamos cosas como timestamp, IDENTITY y TOP). Luego agregaron ISO_WEEK (2008, creo) porque, mientras tanto, la solución alternativa era escribir su propio UDF escalar, lento y horrible; de ​​hecho, incluso crearon uno realmente malo y lo pusieron en la documentación oficial (desde entonces se ha eliminado en la medida de lo posible contar).

No conozco una forma de hacer DATEPART(WEEK finge que es DATEPART(ISO_WEEK – Creo que tendrá que cambiar el código (y si está usando el control de fuente, esto no debería ser muy difícil – ¿en cuántos lugares está realizando este cálculo? ¿Ha pensado en calcularlo en algún lugar para que su código no tenga ¿Ser acribillado con él? Ya que está cambiando el código ahora, este podría ser el momento de considerar esto …).

Y si realmente quieres la respuesta ¿Por qué? Creo que tendrás que elegir a algunos de los desarrolladores originales para determinar por qué eligieron el predeterminado. Una vez más, creo que no fue un verdadero “¡F los estándares!” elección, sino más bien, “¿Qué estándares?”

Aquí hay información que puede ser útil:

https://stackoverflow.com/questions/348880/getting-week-number-off-a-date-in-ms-sql-server-2005

http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/iso-week-in-sql-server

Hay varias autoridades que asumen condiciones diferentes para la primera semana del año. Algunos asumen que el primer día de la semana comienza la primera semana, pero la idea más común es que la primera semana que tiene el primer jueves es la primera semana del año.

Entonces ISO_WEEK acepta eso y me gusta en 2010, 2011 o 2012, ya que puede verificar que ISO_WEEK dice que el 1 de enero es la semana 52 o 53, mientras que WEEK o WK o WW dice que son la primera semana.

SELECT DATEPART (WW,'01/01/2010')   --> 1
SELECT DATEPART (WK,'01/01/2010')   --> 1
SELECT DATEPART (WEEK,'01/01/2010')   --> 1
SELECT DATEPART (ISO_WEEK,'01/01/2010')   --> 53
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *