【问题标题】:Is timestampdiff() in MySQL equivalent to datediff() in SQL Server?MySQL 中的 timestampdiff() 是否等同于 SQL Server 中的 datediff()?
【发布时间】:2014-11-26 02:31:00
【问题描述】:

我正在将函数从 SQL Server 2000 迁移到 MySQL。

以下语句在 SQL Server 2000 中执行,输出为 109。

SELECT DATEDIFF(wk,'2012-09-01','2014-10-01') AS NoOfWeekends1

in mysql 的等效查询使用timestampdiff() 而不是datediff,输出为108。

SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2014-10-01') AS NoOfWeekends1

我需要在 MySQL 中执行时匹配输出,所以它返回 109。

【问题讨论】:

  • 有趣,可能是个bug。
  • 谢谢你,你是对的!问题是,现在我无法修改 SQL Server 代码,它已经在应用程序中了。现在的问题是,我需要编写需要给出与 SQL 服务器代码等效的结果的代码。如果我需要使用“DAY”的意思,这两个应用我都得改一下。
  • 如果您需要回复用户,只有在您对他们的帖子发表评论或者您在他们的用户名中使用 @ 符号时才会通知他们,例如:@Tanner。因为您评论了您的问题,而不是我的回答,所以我没有收到通知。我只是在我的答案被投票时才回来,所以想检查是否有任何更新。
  • @user2905792 您可以使用DAYOFWEEK() 方法来检测第一天/最后几天,并添加一些逻辑,如果这些天跨越周末而没有完整的一周,则将周计数加1。

标签: mysql sql-server sql-server-2000 datediff


【解决方案1】:

我认为这可能是由以下两种情况之一引起的:

  • 在您的 SQL Server 和 MySQL 实例之间被归类为一周的第一天。
  • SQL Server 和 MySQL 之间如何计算周数

您给定的日期2012-09-01 是星期六,这似乎排除了一周的开始日,通常是星期日或星期一。

MySQL 的默认开始日期为:0 (Sunday)

要找出您的 SQL Server 本周开始,您可以使用 @@DATEFIRST 运行以下命令:

select @@DATEFIRST -- default US English = 7 (Sunday)

您可以将计算更改为按天计算而不是按周计算,然后除以 7 以获得更准确的值,您可以随意四舍五入:

MySQL:SQL Fiddle Demo

SELECT TIMESTAMPDIFF(DAY, '2012-09-01', '2014-10-01')/7 AS NoOfWeekends1


| NOOFWEEKENDS1 |
|---------------|
|      108.5714 |

SQL Server:SQL Fiddle Demo

SELECT DATEDIFF(d,'2012-09-01','2014-10-01')/7.0 AS NoOfWeekends1

| NOOFWEEKENDS1 |
|---------------|
|    108.571428 |

您可以向上或向下取整,具体取决于您是想匹配之前的结果还是将其计为额外的周末。

SQL Server 似乎计算了两个日期之间的星期日数(如果这是一周的开始),如 this example fiddle 所示,我已将日期范围更改为 2 天,周六和周日:

SELECT DATEDIFF(wk,'2012-09-01','2012-09-02') AS NoOfWeekends1

| NOOFWEEKENDS1 |
|---------------|
|             1 |

正如this demo fiddle 所示,MySQL 中的相同值似乎仅将整整 7 天计算为一周:

SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-02') AS NoOfWeekends1

| NOOFWEEKENDS1 |
|---------------|
|             0 |

只有当整整 7 天过去后,您才会得到 1 的结果,正如您在 this demo fiddle 中看到的那样:

SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-08') AS NoOfWeekends1

| NOOFWEEKENDS1 |
|---------------|
|             1 |

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 2013-09-30
    相关资源
    最近更新 更多