日付型アラカルト
数個使えるけど、どう違うのか
PostgreSQL8.2基準
ドキュメントではまずこう言う
PostgreSQLは、全ての日付/時刻入力のサポートにおいて、内蔵しているヒューリスティックパーサを使用します。 日付と時刻は文字列で入力され、そのフィールドにはどのような種類の情報が入るのかが事前に決められている別個のフィールドに分割されます。 それぞれのフィールドは解釈された後、数値を割り当てられたり、無視されたり、あるいははねられたりします。 構文解析に際し、月、曜日、および時間帯を含む、全てのテキストフィールドに対する内部参照テーブルがあります。
まあ、ここはあんまり関係ない
面白いのは理解する形式に略式があること
月は几帳面に書かなくてもこんな風に対応している
月名 省略形式 January Jan February Feb March Mar April Apr May ない June Jun July Jul August Aug September Sep Sept October Oct November Nov December Dec
曜日も略せる
曜日名 略 Sunday Sun Monday Mon Tuesday Tue Tues Wednesday Wed Weds Thursday Thu Thur Thurs Friday Fri Saturday Sat
へー。便利だ
ちなみに、だからといって入力形式がフリーダム過ぎるわけではない
以下、形式と理解
まずは日付入力形式
入力 理解 January 8, 1999 全てのdatestyle入力モードにおいて曖昧さがありません。 1999-01-08 ISO 8601。全てのモードで1月8日になります(推奨書式)。 1/8/1999 MDYモードでは1月8日、DMYモードでは8月1日。 1/18/1999 MDYモードでは1月18日、他のモードでは拒絶されます。 01/02/03 MDYモードでは2003年1月2日、DMYモードでは2003年2月1日、YMDモードでは2001年2月3日。 1999-Jan-08 全てのモードで1月8日になります。 Jan-08-1999 全てのモードで1月8日になります。 08-Jan-1999 全てのモードで1月8日になります。 99-Jan-08 YMDモードで1月8日、他のモードではエラー。 08-Jan-99 1月8日。ただしYMDモードではエラー。 Jan-08-99 1月8日。ただしYMDモードではエラー。 19990108 ISO 8601。全てのモードで1月8日になります。 990108 ISO 8601。全てのモードで1月8日になります。 1999.008 年とその日までの累計 J2451187 ユリウス日 January 8, 99 BC 西暦紀元前99年
続いて時刻
入力 理解 04:05:06.789 ISO 8601 04:05:06 ISO 8601 04:05 ISO 8601 040506 ISO 8601 04:05 AM 04:05と同じ。AMは値に影響しません。 04:05 PM 16:05と同じ。時の入力は12以下でなければなりません。 04:05:06.789-8 ISO 8601 04:05:06-08:00 ISO 8601 04:05-08:00 ISO 8601 040506-08 ISO 8601 04:05:06 PST 省略形による時間帯の指定。 2003-04-12 04:05:06 America/New_York 名前による時間帯の指定。
時間帯指定については
http://www.postgresql.jp/document/pg826doc/html/datatype-datetime.html#DATATYPE-TIMEZONES
に色々
-
-
-
- -
-
-
いよいよ型について
数種類あって性能が違う
名前
量 説明
最大値 精度
timestamp [ (p) ] [ without time zone ] 8 バイト 日付と時刻両方 4713 BC 5874897 AD 1μ秒、14桁 timestamp [ (p) ] with time zone 8バイト 日付と時刻両方、時間帯付き 4713 BC 5874897 AD 1μ秒、14桁 interval [ (p) ] 12バイト 時間間隔 -178000000年 178000000年 1μ秒、14桁 date 4バイト 日付のみ 4713 BC 5874897 AD 1日 time [ (p) ] [ without time zone ] 8バイト その日の時刻のみ 00:00:00/24:00:00 1μ秒、14桁 time [ (p) ] with time zone 12バイト その日の時刻のみ、時間帯付き 00:00:00+1459/24:00:00-1459 1μ秒、14桁
で、型によって特殊な値を指定可能である
その形式と対応、プロパティ
epoch date, timestamp 1970-01-01 00:00:00+00(Unixシステム時間におけるゼロ) infinity timestamp 他の全てのタイムスタンプより遅い -infinity timestamp 他の全てのタイムスタンプより早い now date time timestamp 現トランザクションの開始時刻 today date timestamp 今日の始まり tomorrow date timestamp 明日の始まり yesterday date timestamp 昨日の始まり allballs time 00:00:00.00 UTC