Myślę, że może to być spowodowane jedną z dwóch rzeczy:
- Co jest klasyfikowane jako pierwszy dzień tygodnia między instancjami SQL Server i MySQL.
- Jak liczone są tygodnie między SQL Server a MySQL
Twoja podana data 2012-09-01
wypada w sobotę, co wydaje się wykluczać dzień rozpoczęcia tygodnia, którym zwykle jest niedziela lub poniedziałek.
MySQL ma domyślny dzień rozpoczęcia:0 (Sunday)
Aby dowiedzieć się o swoim SQL Server na początku tygodnia, możesz użyć @ @DATEFIRST uruchamiając to:
select @@DATEFIRST -- default US English = 7 (Sunday)
Możesz zmienić obliczenia tak, aby działały w dniach, a nie tygodniach, i podzielić przez 7, aby uzyskać dokładniejszą wartość, którą możesz zaokrąglić według własnego uznania:
MySQL:Pokaz SQL Fiddle
SELECT TIMESTAMPDIFF(DAY, '2012-09-01', '2014-10-01')/7 AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 108.5714 |
Serwer SQL:Pokaz SQL Fiddle :
SELECT DATEDIFF(d,'2012-09-01','2014-10-01')/7.0 AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 108.571428 |
Możesz zaokrąglić to w górę lub w dół, w zależności od tego, czy chcesz dopasować swój poprzedni wynik, czy liczyć go jako dodatkowy weekend.
SQL Server wydaje się liczyć niedziele (jeśli jest to początek tygodnia) między 2 datami, jak pokazano za pomocą te przykładowe skrzypce gdzie zmieniłem zakres dat na 2 dni, sobotę i niedzielę:
SELECT DATEDIFF(wk,'2012-09-01','2012-09-02') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 1 |
Gdzie te same wartości w MySQL wydają się liczyć tylko pełne 7 dni jako tydzień, jak pokazano w te skrzypce demonstracyjne :
SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-02') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 0 |
Dopiero po upływie pełnych 7 dni otrzymasz wynik 1, jak widać w tym demo skrzypce :
SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-08') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 1 |