我认为这可能是由以下两件事之一引起的:
- SQL Server 和 MySQL 实例之间的第一天被归类为一周的第一天。
- SQL Server 和 MySQL 之间的周数是如何计算的
您指定的日期2012-09-01
恰逢星期六,这似乎排除了一周的开始日,通常是星期日或星期一。
MySQL 的默认开始日期为:0 (Sunday)
要了解您的 SQL Server 一周的开始时间,您可以使用@@日期第一 http://msdn.microsoft.com/en-gb/library/ms181598.aspx通过运行这个:
select @@DATEFIRST -- default US English = 7 (Sunday)
您可以将计算更改为按天而不是按周计算,然后除以 7 以获得更准确的值,您可以根据需要舍入该值:
MySQL: SQL 小提琴演示 http://sqlfiddle.com/#!2/d41d8/45868
SELECT TIMESTAMPDIFF(DAY, '2012-09-01', '2014-10-01')/7 AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 108.5714 |
SQL服务器:SQL 小提琴演示 http://sqlfiddle.com/#!6/d41d8/21864:
SELECT DATEDIFF(d,'2012-09-01','2014-10-01')/7.0 AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 108.571428 |
您可以将其向上或向下舍入,具体取决于您是否想要匹配之前的结果或将其算作额外的周末。
SQL Server 似乎计算两个日期之间星期日的数量(如果这是一周的开始),如下所示这个例子小提琴 http://sqlfiddle.com/#!6/d41d8/21866我将日期范围更改为两天,周六和周日:
SELECT DATEDIFF(wk,'2012-09-01','2012-09-02') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 1 |
MySQL 中的相同值似乎只算作一周整整 7 天,如下所示这个演示小提琴 http://sqlfiddle.com/#!2/d41d8/45879:
SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-02') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 0 |
只有经过整整 7 天后,您才能得到 1 的结果,如您在这个演示小提琴 http://sqlfiddle.com/#!2/d41d8/45880:
SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-08') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 1 |