当我执行此查询时:
SELECT CURRENT_TIMESTAMP(),CURRENT_DATE()+0,CURRENT_DATE;
我得到这个结果:
CURRENT_TIMESTAMP(), CURRENT_DATE()+0, CURRENT_DATE
2019-03-25 08:54:33, 20190325 , 2019-03-24
为什么 CURRENT_DATE 和 CURRENT_DATE + 0 之间存在差异?
我的服务器版本是:15.1 Distrib 10.1.37-MariaDB,适用于 debian-linux-gnu (x86_64),使用 readline 5.2
感谢您的建议:)
最佳答案
我同意结果可能有些令人惊讶。您向某个日期添加零并期望它保持在该日期。然而,这意味着您添加零个“东西”,例如零小时或零天(否则:+1 是否意味着日期?)。
有一些 DBMS 可以做到这一点。例如,在 Oracle 中,somedate + 1
表示 somedate + 间隔“1”天
。然而 MySQL 却没有。 MySQL 而是将数字(在您的情况下为零)添加到日期的内部数字表示中。他们为什么要这样做,我无法理解。为什么我们想看看 MySQL 内部使用什么来存储日期?这对我们来说应该不重要。因此,MySQL 所做的是将 CURRENT_DATE
转换为数值,然后添加零,这就是您在结果中看到数字的原因。
您可以从中学到什么:不要在日期中添加数字,因为它实际上没有任何意义。 2008 年 10 月 3 日加 23 是什么(与“加 23 天”或“加 23 周”或其他什么相反)?它只是没有任何意义。因此,请将其视为 DBMS 中的缺陷,甚至允许这样做,但永远不要使用它。
您当然可以随时为日期添加间隔,例如
select current_date + interval 0 day;
关于mysql - CURRENT_TIMESTAMP()、CURRENT_DATE() + 0 和 CURRENT_DATE() 之间的时间差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55333651/