我尝试执行以下查询以从给定日期减去一天:
DATE(FROM_UNIXTIME(UNIX_TIMESTAMP('2013-04-01') - 86400))
返回2013-03-30,但它应该返回2013-03-31。
如果我试图减去2013-04-02的某一天,我会正确地返回2013-04-01。 这是mysql中的日期错误吗?
答案 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)