これは、次の2つのいずれかが原因である可能性があると思います。
- SQLServerインスタンスとMySQLインスタンスの間で週の最初の曜日として分類されるもの。
- SQLServerとMySQLの間の週のカウント方法
指定された日付2012-09-01
土曜日に該当します。これは、通常は日曜日または月曜日である週の開始日を除外しているようです。
MySQLのデフォルトの開始日は0 (Sunday)
です。
SQL Serverの週の始まりを確認するには、 @を使用できます。 @DATEFIRST これを実行することによって:
select @@DATEFIRST -- default US English = 7 (Sunday)
計算を変更して、週ではなく日数で機能し、7で割ってより正確な値を取得することができます。この値は、好きなように丸めることができます。
MySQL:SQLFiddleデモ
SELECT TIMESTAMPDIFF(DAY, '2012-09-01', '2014-10-01')/7 AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 108.5714 |
SQL Server:SQLFiddleデモ :
SELECT DATEDIFF(d,'2012-09-01','2014-10-01')/7.0 AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 108.571428 |
以前の結果と一致させるか、追加の週末としてカウントするかに応じて、切り上げまたは切り下げを行うことができます。
SQL Serverは、 このフィドルの例 日付範囲を土曜日と日曜日の2日間に変更しました:
SELECT DATEDIFF(wk,'2012-09-01','2012-09-02') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 1 |
一方、MySQLの同じ値は、に示すように、1週間として完全な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 |