日付型アラカルト

数個使えるけど、どう違うのか
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