Saya pikir ini bisa disebabkan oleh salah satu dari 2 hal:
- Apa yang diklasifikasikan sebagai hari pertama dalam seminggu antara instance SQL Server dan MySQL Anda.
- Berapa minggu dihitung antara SQL Server dan MySQL
Tanggal Anda 2012-09-01
jatuh pada hari Sabtu, yang tampaknya mengesampingkan hari awal dalam seminggu, yang biasanya hari Minggu atau Senin.
MySQL memiliki hari mulai default:0 (Sunday)
Untuk mengetahui awal minggu SQL Server Anda, Anda dapat menggunakan @ @DATEFIRST dengan menjalankan ini:
select @@DATEFIRST -- default US English = 7 (Sunday)
Anda dapat mengubah perhitungan Anda untuk bekerja pada hari daripada minggu dan membaginya dengan 7 untuk mendapatkan nilai yang lebih akurat, yang dapat Anda bulatkan sesuka Anda:
MySQL:Demo SQL Fiddle
SELECT TIMESTAMPDIFF(DAY, '2012-09-01', '2014-10-01')/7 AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 108.5714 |
SQL Server:Demo SQL Fiddle :
SELECT DATEDIFF(d,'2012-09-01','2014-10-01')/7.0 AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 108.571428 |
Anda dapat membulatkannya ke atas atau ke bawah tergantung pada apakah Anda ingin mencocokkan hasil sebelumnya atau menghitungnya sebagai akhir pekan tambahan.
SQL Server tampaknya menghitung jumlah hari Minggu (jika itu awal minggu) antara 2 tanggal seperti yang ditunjukkan dengan contoh biola ini di mana saya telah mengubah rentang tanggal menjadi 2 hari, hari Sabtu dan Minggu:
SELECT DATEDIFF(wk,'2012-09-01','2012-09-02') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 1 |
Sedangkan nilai yang sama di MySQL tampaknya hanya menghitung 7 hari penuh seminggu seperti yang ditunjukkan dalam biola demo ini :
SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-02') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 0 |
Hanya setelah 7 hari penuh Anda mendapatkan hasil 1 seperti yang Anda lihat di demo ini biola :
SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-08') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 1 |