[pgsql-jp: 37344] Re: date 型のinfinityについて

Katsuhiko Okano k_okano @ po.ntts.co.jp
2006年 7月 13日 (木) 17:12:09 JST


岡野と申します。

> ドキュメントを読む限り、すべての時間よりも遅い時間定数infinityは
> timestamp型でしか使えないようなのですが,date型ですべての時間よりも
> 遅い時間定数を使用する方法はありますか?
> 
> http://www.postgresql.jp/document/pg813doc/html/datatype-datetime.html

なぜ定数と書かれたのか理由が分からないのでまとはずれかもしれませんが、
上記URLにあるドキュメントの「8.5. 日付/時刻データ型」を読むと、date型は
最遠の過去=4713 BC、 最遠の未来=5874897 AD、 精度=1日
とあるので、ユリウス日(紀元前4712年1月1日からの通算経過日)の0日目を
date型に変換して使うアイデアはどうでしょう。

testdb=# SELECT to_date(0, 'J');
    to_date
---------------
 0001-01-01 BC
(1 row)

testdb=# SELECT to_date(1721426, 'J');
  to_date
------------
 0001-01-01
(1 row)

testdb=# SELECT to_date(2453930, 'J');
  to_date
------------
 2006-07-13
(1 row)

testdb=# SELECT to_date(2147483646, 'J');
    to_date
---------------
 5874898-06-02
(1 row)

testdb=# SELECT to_date(2147483647, 'J');
    to_date
---------------
 5874898-06-03
(1 row)

testdb=# SELECT to_date(2147483648, 'J');
    to_date
---------------
 5874898-06-03
(1 row)

testdb=#


ドキュメントの「8.5.4. 内部」には、以下のような記述があるため
date型にどんな意味のデータを入れるかによっては何か注意が必要なのかもしれません。
> PostgreSQLは全ての日付と時刻の計算にユリウス日を使っています。
> これは、紀元前4,713年から未来までの全ての日付を、1年は365.2425日で
> あると仮定し正確な予測や計算をするという優れた特性を持っています。 
> 
> 19世紀以前の日付規則はおもしろい読み物にはなりますが、
> 日付/時刻ハンドラの正しいコーディングを保証することは
> 整合性について完璧ではありません。
----------------------------------------
Katsuhiko Okano
k_okano at po.ntts.co.jp
NTT Sofrware Corp. (division "NBRO-PT4")



pgsql-jp メーリングリストの案内