そしてIntervalStyleがsql_standardに設定されている場合に出力でも使用されます。), 標準の4.4.3.2節の"指定文字付書式"または4.4.3.3節の"代替書式"のどちらかを使用して、時間間隔値はISO 8601時間間隔として書くこともできます。 IntervalStyleがsql_standardに設定されている場合、先頭の符号はすべてのフィールドに適用されるものとみなされます(ただし他に符号がない場合のみです)。 指定がなければ日の前に月が現れます。 (これはPostgreSQLのバージョン8.2以前からの変更です。 時間帯省略形に対してTimeZone設定パラメータおよびlog_timezone設定パラメータを設定することはできませんが、日付時刻型の入力値やAT TIME ZONE演算子に省略形を使用することができます。, 時間帯名やその省略形に加え、PostgreSQLは、STDoffsetやSTDoffsetDSTという形式のPOSIX様式の時間帯指定を受付けます。 表8-18はそれぞれの出力形式を示した例です。, sql_standard形式は、時間間隔値が標準制約(構成要素に正負が混在していない年数と月数のみ、または日数と時間のみ)を満足する場合、時間間隔リテラル文字列に対し標準SQLに準拠する出力を作成します。 例えば、システムの動作はより独特なUTCの省略形を使用し続けた状態で、SET TIMEZONE TO FOOBAR0でも動作します。 入力文字列に時間帯が指定されていない場合は、システムのTimeZoneパラメータに示されている値が時間帯とみなされ、timezone時間帯用のオフセットを使用してUTCに変換されます。, timestamp with time zone値が出力されると、この値はUTCから現行のtimezoneに変換され、その時間帯のローカル時間として表示されます。 以下に、いくつか特別な設定方法を示します。, SET TIME ZONE SQLコマンドはセッションの時間帯を設定します。 timestampの値は2000-01-01深夜を基準にした経過秒数として格納されます。 (他にAD/BCを時間帯の前に付ける方法もありますが、これは推奨される順序ではありません。) しかし、ESTの例にあるように、必ずしも常用時間を示しているわけではありません。, 時間帯省略形の正当性を検査しないため、POSIX書式時間帯機能ではおかしな入力を警告なく受け付けてしまう可能性があることに注意すべきです。 dateとtimeの書式は、例にあるとおり、それぞれ日付と時刻の部分です。しかし、POSTGRESではISO書式の日付部分のみを出力します。(YMDやMDYの場合12-17-1997を返し、DMYの場合17-12-1997を返します。), 注意: ISO 8601の仕様では大文字のTは日付と時間を分割します。 また、DSTは省略可能で夏時間時間帯の省略形で、指定オフセットから1時間進むことを意味します。 インストールディレクトリの.../share/timezone/および.../share/timezonesets/の下に保存される構成ファイルから取得されます(項B.3を参照ください)。, TimeZoneはpostgresql.confファイルや第18章で説明する他の標準的な方法で設定することができます。 time単独ではtime without time zoneと同じです。, これらの型への有効な入力は、時刻、その後にオプションで時間帯からなります。 単位は省略しても構いません。 (表8-11と表8-12を参照してください。) つまり、結果の値は明示された入力値の日付/時刻フィールドから持ち込まれますが、時間帯の調整はなされません。, timestamp with time zoneについて内部に格納されている値は常にUTCです(協定世界時、歴史的にグリニッジ標準時GMTとして知られています)。 8.5. ここで、STDは時間帯省略形、offsetはUTCから西に数えた時間単位のオフセットです。 これらはクライアントに表示される前にTimeZone設定パラメータで指定された時間帯におけるローカル時間に変換されます。, America/New_Yorkなどの完全な時間帯名称。 さもなくば、伝統的なPostgreSQLの解釈が使用されます。 direction(方向)はagoもしくは空です。 デフォルトはpostgres書式です。 浮動小数点datetimesを使用すると上で示した範囲より広いtimestampの値(4713 BCから5874897 ADまで)が認められます。, 同じコンパイル時オプションはtimeおよびintervalの値が浮動小数点数か、8バイト整数のいずれかによって格納されるかを決定します。 リテラルが確実にtimestamp with time zoneとして扱われるようにするには、例えば、, のように正しい明示的な型を指定してください。 後の4つでは、オプションとして秒以下の精度指定が可能です。 また、America/New_Yorkなど夏時間規則を含む時間帯名を使用していない限り、日付を指定することはできますが、これは無視されます。 このため、この例では時、分、秒部分は正であるとみなされます。 例えば、'200-10'は'200 years 10 months'(200年と10か月)と解釈されます。 認識できる時間帯名称はpg_timezone_namesビューに列挙されています(項48.72を参照してください)。 したがって、多くの他のソフトウェアでも同じ名前が認識されます。, PSTなどの時間帯省略形。 (実際これらの簡略形は標準SQLで許されたもののみです。 そうでなければ、出力は、正負混在した時間間隔のあいまいさを無くす明示的な符号が付加され、日数-時間数リテラル文字列を伴った標準年数-月数リテラル文字列のようになります。, postgres書式の出力は、DateStyleパラメータがISOに設定されたとき、8.4以前のリリースと一致します。, postgres_verbose書式の出力は、DateStyleパラメータがISOに設定されたとき、8.4以前のリリースと一致します。, iso_8601書式の出力はISO 8601 標準の4.4.3.2セクションに記述の"format with designators(指名付き書式)"に一致します。, 1 year 2 months 3 days 4 hours 5 minutes 6 seconds, @ 1 year 2 mons -3 days 4 hours 5 mins 6 secs ago. したがってDST(夏時間)への切り替えをまたいで日付/時刻演算を行う場合、夏時間を適用することは不可能です。, このような問題を解決するためには、時間帯を使用する際に日付と時刻の両方を保持できる日付/時刻データ型を使用することを勧めます。 デフォルトはISO書式です。 agoはすべてのフィールドを反転させます。 一方、完全な時間帯名称では夏時間遷移規則群も組み込まれます。 infinityと-infinityの値は、特別にシステム内部で表現され、変更されずに表示されます。 justify_daysとjustify_hours関数で通常の範囲を越えた日にちと時刻を調整できます。, 冗長な入力書式、および、より簡略な書式の一部のフィールドでは、フィールド値は小数部分を持つことができます。 PostgreSQL では、表8-9に示されているSQLの日付と時刻データ型のすべてがサポートされています。 これらのデータ型で利用できる演算子については項9.9で説明します。 グレゴリオ暦が導入される前の年であっても(項B.4 …