Eu acho que isso pode ser causado por uma das 2 coisas:
- O que é classificado como o primeiro dia da semana entre as instâncias do SQL Server e do MySQL.
- Como as semanas são contadas entre o SQL Server e o MySQL
Sua data especificada
2012-09-01
cai em um sábado, o que parece descartar o dia de início da semana, que geralmente é domingo ou segunda-feira. O MySQL tem um dia de início padrão de:
0 (Sunday)
Para descobrir o início da semana do seu SQL Server, você pode usar @ @DATEFIRST executando isso:
select @@DATEFIRST -- default US English = 7 (Sunday)
Você pode alterar seu cálculo para trabalhar em dias em vez de semanas e dividir por 7 para obter um valor mais preciso, que você pode arredondar como quiser:
MySQL:Demonstração do SQL Fiddle
SELECT TIMESTAMPDIFF(DAY, '2012-09-01', '2014-10-01')/7 AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 108.5714 |
SQL Server:Demonstração do SQL Fiddle :
SELECT DATEDIFF(d,'2012-09-01','2014-10-01')/7.0 AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 108.571428 |
Você pode arredondar para cima ou para baixo, dependendo se deseja igualar seu resultado anterior ou contá-lo como um fim de semana extra.
O SQL Server parece contar o número de domingos (se for o início da semana) entre 2 datas, conforme mostrado com este exemplo de violino onde alterei o intervalo de datas para 2 dias, um sábado e um domingo:
SELECT DATEDIFF(wk,'2012-09-01','2012-09-02') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 1 |
Onde os mesmos valores no MySQL parecem contar apenas 7 dias completos como uma semana, conforme mostrado em este violino de demonstração :
SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-02') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 0 |
É somente quando 7 dias completos se passam, você obtém o resultado de 1, como você pode ver esta demonstração violino :
SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-08') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 1 |