use*_*792 6 mysql sql-server datediff sql-server-2000
我正在努力将功能从SQL Server 2000迁移到MySQL.
在SQL Server 2000中执行以下语句,输出为109.
SELECT DATEDIFF(wk,'2012-09-01','2014-10-01') AS NoOfWeekends1
Run Code Online (Sandbox Code Playgroud)
在mysql中使用的等效查询timestampdiff()代替datediff并将输出提供为108.
SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2014-10-01') AS NoOfWeekends1
Run Code Online (Sandbox Code Playgroud)
我需要输出在MySQL中执行时匹配,因此返回109.
我认为这可能是由两件事之一引起的:
您的给定日期2012-09-01是星期六,这似乎排除了一周的开始日期,通常是星期日或星期一.
MySQL的默认开始日期为: 0 (Sunday)
要查找本周的SQL Server开始,您可以通过运行以下命令来使用@@ DATEFIRST:
select @@DATEFIRST -- default US English = 7 (Sunday)
Run Code Online (Sandbox Code Playgroud)
您可以将计算更改为在几天而不是几周工作并除以7以获得更准确的值,您可以随意舍入:
MySQL:SQL小提琴演示
SELECT TIMESTAMPDIFF(DAY, '2012-09-01', '2014-10-01')/7 AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 108.5714 |
Run Code Online (Sandbox Code Playgroud)
SQL Server:SQL小提琴演示:
SELECT DATEDIFF(d,'2012-09-01','2014-10-01')/7.0 AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 108.571428 |
Run Code Online (Sandbox Code Playgroud)
您可以向上或向下舍入,具体取决于您是否要匹配以前的结果或将其计为额外周末.
SQL Server似乎计算了2个日期之间的星期日(如果这是一周的开始),如此示例小提琴所示,我将日期范围更改为2天,星期六和星期日:
SELECT DATEDIFF(wk,'2012-09-01','2012-09-02') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 1 |
Run Code Online (Sandbox Code Playgroud)
MySQL中的相同值似乎只计算一周的整整7天,如此演示小提琴所示:
SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-02') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 0 |
Run Code Online (Sandbox Code Playgroud)
只有在完整的7天过去后,你才能得到1的结果,你可以在这个演示小提琴中看到:
SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-08') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 1 |
Run Code Online (Sandbox Code Playgroud)