Мисля, че това може да се дължи на едно от 2 неща:
- Какво се класифицира като първи ден от седмицата между вашия SQL Server и MySQL екземпляри.
- Как се броят седмиците между SQL Server и MySQL
Посочената от вас дата 2012-09-01
пада в събота, което изглежда изключва началния ден от седмицата, който обикновено е неделя или понеделник.
MySQL има начален ден по подразбиране:0 (Sunday)
За да разберете своя SQL Server началото на седмицата, можете да използвате @ @DATEFIRST като изпълните това:
select @@DATEFIRST -- default US English = 7 (Sunday)
Можете да промените изчислението си, за да работи в дни, а не в седмици и да разделите на 7, за да получите по-точна стойност, която можете да закръглите, както желаете:
MySQL:SQL Fiddle Демо
SELECT TIMESTAMPDIFF(DAY, '2012-09-01', '2014-10-01')/7 AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 108.5714 |
SQL сървър:SQL Fiddle демонстрация :
SELECT DATEDIFF(d,'2012-09-01','2014-10-01')/7.0 AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 108.571428 |
Можете да закръглите това нагоре или надолу в зависимост от това дали искате да съвпаднете с предишния си резултат или да го отчетете като допълнителен уикенд.
SQL Server изглежда отчита броя на неделите (ако това е началото на седмицата) между 2 дати, както е показано с тази примерна цигулка където промених диапазона от време на 2 дни, събота и неделя:
SELECT DATEDIFF(wk,'2012-09-01','2012-09-02') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 1 |
Когато същите стойности в MySQL изглежда отчитат само цели 7 дни като седмица, както е показано в тази демонстрационна цигулка :
SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-02') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 0 |
Едва когато изминат цели 7 дни, получавате резултат от 1, както можете да видите в тази демонстрация цигулка :
SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-08') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 1 |