mysql日期bug因为减去一天

时间:2013-04-01 14:50:55

标签: mysql

我尝试执行以下查询以从给定日期减去一天:

DATE(FROM_UNIXTIME(UNIX_TIMESTAMP('2013-04-01') - 86400))

返回2013-03-30,但它应该返回2013-03-31。

如果我试图减去2013-04-02的某一天,我会正确地返回2013-04-01。 这是mysql中的日期错误吗?

3 个答案:

答案 0 :(得分:4)

这不是一个错误 - 你发现的是夏令时中缺少的小时:因为你用秒而不是几天来计算,你的计算是不知道的。

这正是DBMS拥有特殊DATETIME数据类型的原因 - 处理时区,闰年,闰秒,夏令时和日历等所有专业。

让数据库为您完成工作 - 这是获得您想要的更简单,更好的方法:

SELECT DATE('2013-04-01') - INTERVAL 1 DAY

答案 1 :(得分:0)

您的代码假设所有天都有24小时。昨天,3月31日,在大多数欧洲国家有23个小时。要减去一天你需要这样的东西:

SELECT NOW() - INTERVAL 1 DAY

答案 2 :(得分:0)

为什么不使用内置的DATE_SUB()函数?

SELECT DATE_SUB('2013-04-01', INTERVAL 1 DAY)

编辑:不,这是 MySQL中的日期错误。