当我执行此查询时:
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使用readline 5.2分发debian-linux-gnu(x86_64)的10.1.37-MariaDB
谢谢您的任何建议:)
答案 0 :(得分:0)
如果要在MySQL日期中增加一些天数,则应使用INTERVAL
,例如
CURRENT_DATE() + INTERVAL 0 DAY
但是,由于您实际上是MySQL日期的整数,所以这里有一个解释。 CURRENT_DATE()
是日期,而CURRENT_DATE() + 0
结尾是数字。您当前的查询:
SELECT CURRENT_DATE() + 0;
实际上是这样评估的:
SELECT (CAST CURRENT_DATE() AS UNSIGNED) + 0;
强制转换为整数是因为您要向CURRENT_DATE()
的结果中加上零(整数)。
运行以下命令说服自己:
SELECT (CAST CURRENT_DATE() AS UNSIGNED);
结果将返回20180325
。
答案 1 :(得分:0)
我同意结果可能有些令人惊讶。您将一个零添加到一个日期,并希望它保持该日期。但是,这意味着您要添加零“内容”,例如零 hours 或零 days (否则:+1代表日期吗?)。
有些DBMS正是这样做的。例如,在Oracle中,somedate + 1
表示somedate + interval '1' day
。但是,MySQL没有。 MySQL宁愿将数字(在您的情况下为零)添加到日期的内部数字表示形式中。他们为什么这样做,超出了我的范围。为什么我们要查看MySQL内部使用什么存储日期?对我们来说不重要。因此,MySQL所做的就是将CURRENT_DATE
转换为数值,然后加零,这就是为什么在结果中看到数字的原因。
您可以从中学到的东西:不要在日期上加上数字,因为它实际上没有任何意义。什么是2008年10月3日加上23(相对于“加上23天”或“加上23周”或其他)?它只是没有意义。因此,请将此视为DBMS中的缺陷,甚至允许它并且永远不要使用它。
您当然可以随时为日期添加时间间隔,例如
select current_date + interval 0 day;
答案 2 :(得分:0)
我想我找到了答案-问题出在我使用的dataGrip桌面客户端上。我不确定数据到底发生了什么,但似乎a)dataGrip某种程度上使连接的时区不正确,或者b)接收时不正确地转换了数据。在您问之前,我通过终端,MySQL工作台以及在MySQL服务器本身上尝试了相同的查询,并且得到了正确的答案。 :)