Penso che questo potrebbe essere causato da una delle 2 cose:
- Quello che viene classificato come il primo giorno della settimana tra le istanze SQL Server e MySQL.
- Come vengono contate le settimane tra SQL Server e MySQL
La data indicata 2012-09-01
cade di sabato, il che sembra escludere il giorno di inizio della settimana, che di solito è domenica o lunedì.
MySQL ha un giorno di inizio predefinito di:0 (Sunday)
Per scoprire il tuo SQL Server all'inizio della settimana puoi utilizzare @ @DATEFIRST eseguendo questo:
select @@DATEFIRST -- default US English = 7 (Sunday)
Puoi modificare il calcolo in modo che funzioni su giorni anziché su settimane e dividendo per 7 per ottenere un valore più accurato, che puoi arrotondare a tuo piacimento:
MySQL:Demo di SQL Fiddle
SELECT TIMESTAMPDIFF(DAY, '2012-09-01', '2014-10-01')/7 AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 108.5714 |
SQL Server:Demo di SQL Fiddle :
SELECT DATEDIFF(d,'2012-09-01','2014-10-01')/7.0 AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 108.571428 |
Puoi arrotondarlo per eccesso o per difetto a seconda se desideri abbinare il tuo risultato precedente o contarlo come un fine settimana in più.
SQL Server sembra contare il numero di domeniche (se è l'inizio della settimana) tra 2 date, come mostrato con questo esempio di violino dove ho modificato l'intervallo di date in 2 giorni, un sabato e una domenica:
SELECT DATEDIFF(wk,'2012-09-01','2012-09-02') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 1 |
Mentre gli stessi valori in MySQL sembrano contare solo 7 giorni interi come una settimana, come mostrato in questo violino demo :
SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-02') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 0 |
È solo quando trascorrono 7 giorni interi ottieni il risultato di 1 come puoi vedere in questa demo violino :
SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-08') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 1 |