Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server DateDiff()与MySQL TimestampDiff()的比较_Mysql_Sql Server - Fatal编程技术网

SQL Server DateDiff()与MySQL TimestampDiff()的比较

SQL Server DateDiff()与MySQL TimestampDiff()的比较,mysql,sql-server,Mysql,Sql Server,我已经将应用程序的数据库从SQL Server迁移到MySQL。现在我正在调整我的应用程序代码,我遇到了日期函数的问题。具体来说,SQL Server的DateDiff()似乎向上舍入,而MySQL的TimestampDiff()则向下舍入。例如: SQL Server: select datediff(day,'2015-11-25 12:00:00', '2015-11-26') returns 1 MySQL: select timestampdiff(day,'2015-11-25 1

我已经将应用程序的数据库从SQL Server迁移到MySQL。现在我正在调整我的应用程序代码,我遇到了日期函数的问题。具体来说,SQL Server的DateDiff()似乎向上舍入,而MySQL的TimestampDiff()则向下舍入。例如:

SQL Server: select datediff(day,'2015-11-25 12:00:00', '2015-11-26') returns 1

MySQL: select timestampdiff(day,'2015-11-25 12:00:00', '2015-11-26') returns 0
SQL Server: select datediff(day,'2015-11-25', '2015-11-26') returns 1

MySQL: select timestampdiff(day,'2015-11-25', '2015-11-26') returns 1
让MySQL返回与SQLServer相同的结果的最佳方法是什么?我不能只向MySQL中的每个diff表达式添加1,因为在date1和date2之间的差异正好相隔X天的情况下,MySQL的计算结果与SQL Server的计算结果完全相同。例如:

SQL Server: select datediff(day,'2015-11-25 12:00:00', '2015-11-26') returns 1

MySQL: select timestampdiff(day,'2015-11-25 12:00:00', '2015-11-26') returns 0
SQL Server: select datediff(day,'2015-11-25', '2015-11-26') returns 1

MySQL: select timestampdiff(day,'2015-11-25', '2015-11-26') returns 1

编辑:注释仅建议对天数差异进行转换。我还需要支持秒、周、月、年等方面的差异。

如果我这样做,我将编写一个存储函数
SQL\u SERVER\u DATEDIFF()
作为MySQL
TIMESTAMPDIFF()
的包装,并进行调整,使其行为类似于SQL SERVER
DATEDIFF()
,并通过代码进行搜索/替换。这使您能够灵活地解决此问题以及将来可能出现的任何其他问题。

您可以用小时来计算吗?如果它能帮助了解MySQL答案的人,SQL Server不会“舍入”;SQL Server只计算两次之间的天数边界。因此,例如,
2015-11-25 23:58:00
2015-11-25 23:59:00
之间的
day
差异为0,因为没有跨越任何边界。然而,
2015-11-25 23:59:00
2015-11-26 00:00:00
之间的
差异为1,因为跨越了日边界。如果你只是在比较之前去掉日期中的时间成分,我猜你会在MySQL中得到相同的答案。@matt一个day appart的相同值呢?@amdixon有什么问题吗?这是错误的。SQL Server DateDiff以许多单位计算:这可能是我将采用的方法。但是,我仍然需要找出最好的方法来转换各种不同的单元,并将其构建到函数中。由于现在看来SQLServer计算单元边界,而MySQL则对2个日期进行向下舍入减法,所以这开始变得非常棘手。