我认为这可能是以下两种情况之一造成的:
- 在SQL Server和MySQL实例之间,哪一天被归类为一周的第一天。
- 在SQL Server和MySQL之间如何计算一周。
您提供的日期2012-09-01
是星期六,这似乎排除了一周的开始日,通常是星期日或星期一。
MySQL默认的开始日期是:0(星期日)
要查找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 Server: SQL Fiddle演示:
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中相同的值似乎只会将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 |
DAYOFWEEK()
方法来检测第一/最后一天,并添加一些逻辑,如果跨越周末而没有完整的一周,则将1添加到周计数。 - Tanner