我知道公历是从 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_DAYS
和 FROM_DAYS
函数。此外,当我检查 source codes在 MySQL 中,我意识到 STR_TO_DATE
对这些函数使用了类似的方法。据我了解,转换日期对于存储或应用操作是完全不安全的。文件说; “切换期间的日期不存在。”
也是如此。
另外对于不同服务器之间的不一致我可能会有一个解释。我在土耳其 Istanbul 尔和德国法兰克福安装了 2 台不同的机器。它们具有相同的设置不包括本地化设置。第一个显示 1,另一个显示 11 用于日期减法查询。这意味着(在我看来)官方文档中有关于日历转换和本地化的无法解释的部分。
关于mysql - 为什么 1582 中的两个 MySQL 日期看起来相同,但比较结果是错误的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47461263/