3

IYYY 与 YYYY 的日期格式:

SELECT to_char( '2012-12-31'::DATE, 'IYYY-MM-DD' ) AS weird,
       to_char( '2012-12-31'::DATE, 'YYYY-MM-DD' ) AS expected;

结果:

   weird    |  expected  
------------+------------
 2013-12-31 | 2012-12-31

如果“奇怪”的结果是“2013-01-01” ,并不奇怪。

这里有什么问题?(PostgreSQL 9.1.7)

4

1 回答 1

8

IYYY指指定日期的星期几。

2013 年的第一周从 2012 年 12 月 31 日星期一开始,所以问题中奇怪的结果是正确的。

手册中有一个与此直接相关的警告:

尝试使用 ISO 周和公历日期字段的混合构造日期是荒谬的,并且会导致错误。在 ISO 年的上下文中,“月”或“月中的日”的概念没有意义。在公历年的背景下,ISO 周没有任何意义。用户应避免混合使用公历和 ISO 日期规范。

有关更多详细信息,另请参阅 wikipedia iso 周日期文章。

于 2013-01-22T15:27:53.207 回答