Creo que esto podría deberse a una de dos cosas:
- Qué se clasifica como el primer día de la semana entre sus instancias de SQL Server y MySQL.
- Cómo se cuentan las semanas entre SQL Server y MySQL
Su fecha dada 2012-09-01
cae en sábado, lo que parece descartar el día de inicio de la semana, que suele ser domingo o lunes.
MySQL tiene un día de inicio predeterminado de:0 (Sunday)
Para averiguar el inicio de semana de su SQL Server, puede usar @ @DATEFIRST ejecutando esto:
select @@DATEFIRST -- default US English = 7 (Sunday)
Puede cambiar su cálculo para trabajar en días en lugar de semanas y dividir por 7 para obtener un valor más preciso, que puede redondear como desee:
MySQL:Demostración de SQL Fiddle
SELECT TIMESTAMPDIFF(DAY, '2012-09-01', '2014-10-01')/7 AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 108.5714 |
Servidor SQL:Demostración de SQL Fiddle :
SELECT DATEDIFF(d,'2012-09-01','2014-10-01')/7.0 AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 108.571428 |
Puede redondearlo hacia arriba o hacia abajo dependiendo de si desea igualar su resultado anterior o contarlo como un fin de semana adicional.
SQL Server parece contar la cantidad de domingos (si ese es el comienzo de la semana) entre 2 fechas como se muestra con este violín de ejemplo donde he cambiado el intervalo de fechas para que sea de 2 días, un sábado y un domingo:
SELECT DATEDIFF(wk,'2012-09-01','2012-09-02') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 1 |
Mientras que los mismos valores en MySQL parecen contar solo 7 días completos como una semana, como se muestra en este violín de demostración :
SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-02') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 0 |
Solo cuando pasan 7 días completos obtienes el resultado de 1, como puedes ver en esta demostración violín :
SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-08') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 1 |