Tôi nghĩ điều này có thể do một trong 2 nguyên nhân:
- Những gì được phân loại là ngày đầu tiên trong tuần giữa các phiên bản SQL Server và MySQL của bạn.
- Cách tính số tuần giữa SQL Server và MySQL
Ngày nhất định của bạn 2012-09-01
rơi vào Thứ Bảy, dường như loại trừ ngày bắt đầu của tuần, thường là Chủ Nhật hoặc Thứ Hai.
MySQL có ngày bắt đầu mặc định là:0 (Sunday)
Để biết SQL Server bắt đầu trong tuần, bạn có thể sử dụng @ @DATEFIRST bằng cách chạy cái này:
select @@DATEFIRST -- default US English = 7 (Sunday)
Bạn có thể thay đổi phép tính của mình thành ngày thay vì tuần và chia cho 7 để nhận được giá trị chính xác hơn, bạn có thể làm tròn số theo ý mình:
MySQL: SQL Fiddle Demo
SELECT TIMESTAMPDIFF(DAY, '2012-09-01', '2014-10-01')/7 AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 108.5714 |
Máy chủ SQL: SQL Fiddle Demo :
SELECT DATEDIFF(d,'2012-09-01','2014-10-01')/7.0 AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 108.571428 |
Bạn có thể làm tròn số đó lên hoặc xuống tùy thuộc vào việc bạn muốn khớp với kết quả trước đó của mình hay được tính là thêm một ngày cuối tuần.
SQL Server dường như đếm số ngày Chủ nhật (nếu đó là ngày đầu tuần) giữa 2 ngày như được hiển thị với ví dụ này fiddle nơi tôi đã thay đổi phạm vi ngày thành 2 ngày, Thứ Bảy và Chủ Nhật:
SELECT DATEDIFF(wk,'2012-09-01','2012-09-02') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 1 |
Trường hợp các giá trị tương tự trong MySQL dường như chỉ tính đủ 7 ngày trong một tuần như được hiển thị trong trò chơi thử nghiệm này :
SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-02') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 0 |
Chỉ khi đủ 7 ngày trôi qua, bạn mới nhận được kết quả là 1 như bạn có thể thấy trong bản trình diễn này nghịch ngợm :
SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-08') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 1 |