マニュアルへのリンクは/9.2/としています。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■■■■ PostgreSQL スキルアップノート
■■■■
■◆■■ 日付/時刻関連のデータ型
■■■■
■■■■
■■■■ 2013/03/04
■■■■ 使用環境:PostgreSQL9.1.7 (CentOS6.2)
(C) 2013 ohdb
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【マニュアル】
第8章データ型/日付/時刻データ型→●[マニュアル]
第9章関数と演算子/データ型書式設定関数→●[マニュアル]
第9章関数と演算子/日付/時刻関数と演算子→●[マニュアル]
第18章サーバの設定/クライアント接続デフォルト→●[マニュアル]
【マニュアル参考】
SQLコマンドリファレンス・SET→●[マニュアル]
付録 B. 日付/時刻のサポート→●[マニュアル]
【その他】
ISO8601(日付と時刻の表記に関する国際規格)→●[その他]
■1■ 日付/時刻データ型(簡易版)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
さまざまな型、オプションがあるが、科学用途以外、日本時間のみでよいシステムであれば
以下の3つから選べば十分と思われる。
データ型 サイズ 内容
-----------------------------------------------------------------------------
date 4B 日付 時刻なし
timestamp(0) 8B 日付時刻 秒まで(0指定小数秒なし) タイムゾーンなし
time(0) 8B 時刻 秒まで(0指定小数秒なし) タイムゾーンなし
-----------------------------------------------------------------------------
他にinterval型は用途によっては価値あり。(詳細は未調査)
timestampはゼロ(0)を指定しないとμ秒まで保持される。
current_timestamp等で取得した値を入れると(業務的に必要なくても)小数秒が格納され、
その扱いの不統一などによって取り出したときの結果が変わるなどのトラブルになりかねない。
(別のページにて記載)
このため「timestamp」ではなく、まずは基本として「timestamp(0)」を挙げた。
■2■ 日付/時刻データ型(詳細版)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
第8章データ型/日付/時刻データ型→●[マニュアル]
データ型 サイズ 内容
-----------------------------------------------------------------------------
date 4B 日付のみ
-----------------------------------------------------------------------------
timestamp [(p)] [without time zone] 8B 日付時刻 タイムゾーンなし
-----------------------------------------------------------------------------
timestamp [(p)] with time zone 8B 日付時刻 タイムゾーンあり
-----------------------------------------------------------------------------
time [(p)] [without time zone] 8B 時刻 タイムゾーンなし
-----------------------------------------------------------------------------
time [(p)] with time zone 12B 時刻 タイムゾーンあり
-----------------------------------------------------------------------------
interval [ fields ] [(p)] 12B 時間間隔
-----------------------------------------------------------------------------
・pはいずれも小数秒の桁数。
指定しない場合、通常の環境なら「6」 マイクロ秒
指定する場合、 timestamp(0)〜timestamp(6)
・タイムゾーン (マニュアルでは「時間帯」と表記)
timestampとtimeではタイムゾーンを指定できる。
指定を省略すればタイムゾーンなし without time zone となる。
・fieldsは以下の通り
年レベル YEAR
月レベル MONTH YEAR TO MONTH
日レベル DAY
時間レベル HOUR DAY TO HOUR
分レベル MINUTE DAY TO MINUTE HOUR TO MINUTE
秒レベル SECOND DAY TO SECOND HOUR TO SECOND MINUTE TO SECOND
・別名のデータ型timestamptz,timetz
postgres独自で、また\dで確認しても標準の型に変換される。
表記のしやすさだけで、あえて使うメリットはない。
timestamptz =>timestamp with time zone
timetz =>time with time zone
以上