gpt4 book ai didi

mysql - MySQL 中的 timestampdiff() 是否等同于 SQL Server 中的 datediff()?

转载 作者:可可西里 更新时间:2023-11-01 07:03:28 26 4
gpt4 key购买 nike

我正致力于将函数从 SQL Server 2000 迁移到 MySQL。

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

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

在 mysql 中的等效查询使用 timestampdiff() 而不是 datediff 并给出输出为 108。

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

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

最佳答案

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

  • 在您的 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 Demo

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


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

SQL 服务器: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 |

MySQL 中的相同值似乎只将整整 7 天算作一周,如 this demo fiddle 所示。 :

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 |

关于mysql - MySQL 中的 timestampdiff() 是否等同于 SQL Server 中的 datediff()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26138167/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com