mysql - 为什么 1582 中的两个 MySQL 日期看起来相同,但比较结果是错误的?

标签 mysql sql calendar gregorian-calendar sql-date-functions

我知道公历是从 1582 年 10 月 15 日开始的,在从儒略历过渡的过程中,少了 10 天。

当我执行此查询时:

SELECT STR_TO_DATE('1582-10-05', '%Y-%m-%d')

我得到这个结果:

1582-10-15 (the 10 days difference). 

但是当我试图在这些日期之间进行匹配时,我得到的是原始日期(10 月 5 日而不是 15 日)。

例如:

SELECT STR_TO_DATE('1582-10-05', '%Y-%m-%d') = STR_TO_DATE('1582-10-15', '%Y-%m-%d')

我得到了一个错误的回应,尽管你本以为会得到一个真实的回应,因为 10 月 5 日实际上算作 10 月 15 日,正如我们在第一个示例中看到的那样。

谁能解释一下这是怎么回事?

最佳答案

开启 documentation据说,由于您注意到的转换,必须谨慎调用 TO_DAYSFROM_DAYS 函数。此外,当我检查 source codes在 MySQL 中,我意识到 STR_TO_DATE 对这些函数使用了类似的方法。据我了解,转换日期对于存储或应用操作是完全不安全的。文件说; “切换期间的日期不存在。” 也是如此。

另外对于不同服务器之间的不一致我可能会有一个解释。我在土耳其 Istanbul 尔和德国法兰克福安装了 2 台不同的机器。它们具有相同的设置不包括本地化设置。第一个显示 1,另一个显示 11 用于日期减法查询。这意味着(在我看来)官方文档中有关于日历转换和本地化的无法解释的部分。

关于mysql - 为什么 1582 中的两个 MySQL 日期看起来相同,但比较结果是错误的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47461263/

相关文章:

php - 将 MySQL 表数据回显为 HTML

sql - 溶胶/冷聚变 : INSERTS with multiple foreign keys from session

支持 Memcache 的 MySQL 集群

php - 选择相互关注者

MySQL - 从具有引用 ID 的行中查找值

java - Hibernate更新查询

sql - 使用 JPA 2 在权限模型中存储用于按位比较的整数

javascript - 完整日历 - MinMax Time+SlotDuration 不显示小时列

jquery - 使用 jquery 插件在 Rails 3 中显示日期字段

javascript - Fullcalendar v2.x IE8 上的月份 View 错误