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 week date article も参照してください。

于 2013-01-22T15:27:53.207 に答える