SQL Server DateDiff()与MySQL TimestampDiff()的比较
我已经将应用程序的数据库从SQL Server迁移到MySQL。现在我正在调整我的应用程序代码,我遇到了日期函数的问题。具体来说,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: 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()
作为MySQLTIMESTAMPDIFF()
的包装,并进行调整,使其行为类似于SQL SERVERDATEDIFF()
,并通过代码进行搜索/替换。这使您能够灵活地解决此问题以及将来可能出现的任何其他问题。您可以用小时来计算吗?如果它能帮助了解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个日期进行向下舍入减法,所以这开始变得非常棘手。