Myslím, že to může být způsobeno jednou ze 2 věcí:
- Co je klasifikováno jako první den v týdnu mezi instancemi SQL Server a MySQL.
- Jak se počítají týdny mezi SQL Serverem a MySQL
Vámi uvedené datum 2012-09-01
připadá na sobotu, což zřejmě vylučuje začátek týdne, kterým je obvykle neděle nebo pondělí.
MySQL má výchozí počáteční den:0 (Sunday)
Chcete-li zjistit svůj SQL Server začátek týdne, můžete použít @ @DATEFIRST spuštěním tohoto:
select @@DATEFIRST -- default US English = 7 (Sunday)
Svůj výpočet můžete změnit tak, aby pracoval na dny, nikoli týdny, a dělení 7, abyste získali přesnější hodnotu, kterou můžete zaokrouhlit, jak chcete:
MySQL:Ukázka SQL Fiddle
SELECT TIMESTAMPDIFF(DAY, '2012-09-01', '2014-10-01')/7 AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 108.5714 |
SQL Server:Ukázka SQL Fiddle :
SELECT DATEDIFF(d,'2012-09-01','2014-10-01')/7.0 AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 108.571428 |
Můžete to zaokrouhlit nahoru nebo dolů v závislosti na tom, zda se chcete srovnat s předchozím výsledkem, nebo to počítat jako víkend navíc.
Zdá se, že SQL Server počítá počet nedělí (pokud je to začátek týdne) mezi 2 daty, jak je znázorněno pomocí tento příklad houslí kde jsem změnil časové období na 2 dny, sobotu a neděli:
SELECT DATEDIFF(wk,'2012-09-01','2012-09-02') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 1 |
Zdá se, že stejné hodnoty v MySQL počítají pouze celých 7 dní jako týden, jak je uvedeno v tyto ukázkové housle :
SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-02') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 0 |
Pouze když uplyne celých 7 dní, dostanete výsledek 1, jak můžete vidět v této ukázce housle :
SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-08') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 1 |