mysql - CURRENT_TIMESTAMP()、CURRENT_DATE() + 0 和 CURRENT_DATE() 之间的时间差

标签 mysql

当我执行此查询时:

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/

相关文章:

PHP MYSQL数组

c# - 从主程序调用选择方法并填充列表框

php - Mysql:在拆分名称表中搜索全名

sql - 内连接只返回7条记录

mysql - 无法连接到本地主机数据库

Android 应用程序编码问题 - 无法正确显示 ÅÄÖ

mysql根据特定条件导出表

php - get_results() 中的 WordPress PHP 变量

java - 使用 JDBC JAVA 进行分页

php - 带有条件的sql插入查询 - 不存在