Jeg tror, at dette kan være forårsaget af en af 2 ting:
- Hvad er klassificeret som den første dag i ugen mellem din SQL Server og MySQL-instanser.
- Hvordan uger tælles mellem SQL Server og MySQL
Din angivne dato 2012-09-01
falder på en lørdag, hvilket ser ud til at udelukke ugens startdag, som normalt er søndag eller mandag.
MySQL har en standard startdag på:0 (Sunday)
For at finde ud af din SQL Server-start på ugen kan du bruge @ @DATEFIRST ved at køre denne:
select @@DATEFIRST -- default US English = 7 (Sunday)
Du kan ændre din beregning til at arbejde på dage i stedet for uger og dividere med 7 for at få en mere nøjagtig værdi, som du kan afrunde som du vil:
MySQL:SQL Fiddle Demo
SELECT TIMESTAMPDIFF(DAY, '2012-09-01', '2014-10-01')/7 AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 108.5714 |
SQL-server:SQL Fiddle Demo :
SELECT DATEDIFF(d,'2012-09-01','2014-10-01')/7.0 AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 108.571428 |
Du kan runde det op eller ned afhængigt af, om du vil matche dit tidligere resultat eller tælle det som en ekstra weekend.
SQL Server ser ud til at tælle antallet af søndage (hvis det er starten på ugen) mellem 2 datoer som vist med dette eksempel på violin hvor jeg har ændret datointervallet til at være 2 dage, en lørdag og en søndag:
SELECT DATEDIFF(wk,'2012-09-01','2012-09-02') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 1 |
Hvor de samme værdier i MySQL kun ser ud til at tælle hele 7 dage som en uge som vist i denne demofiolin :
SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-02') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 0 |
Det er først, når der går hele 7 dage, du får resultatet på 1, som du kan se i denne demo violin :
SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-08') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 1 |