我知道公历开始于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函数必须谨慎调用,因为您注意到的转换。此外,当我检查mysql的source codes时,我发现STR_TO_DATE使用了与这些函数类似的方法。据我所知,割接日期对于存储或应用操作是完全不安全的。文档也显示;"Dates during a cutover are nonexistent."
另外,对于不同服务器之间的不一致性,我可能有一个解释。我有两台不同的机器,mysql安装在土耳其伊斯坦布尔和德国法兰克福。它们有相同的设置,不包括本地化设置。第一个显示1,另一个显示11用于日期子分段查询。这意味着(在我看来)官方文件中有关于日历切换和本地化的无法解释的部分。

09-30 15:45
查看更多