PostgreSQL 時間/日付関数と演算子

日付/時刻演算子

以下の表は、基本的な算術演算子(+、* など)の動作を示しています:

演算子例結果
+ date '2001-09-28' + integer '7'date '2001-10-05'
+ date '2001-09-28' + interval '1 hour'timestamp '2001-09-28 01:00:00'
+ date '2001-09-28' + time '03:00'timestamp '2001-09-28 03:00:00'
+ interval '1 day' + interval '1 hour'interval '1 day 01:00:00'
+ timestamp '2001-09-28 01:00' + interval '23 hours'timestamp '2001-09-29 00:00:00'
+ time '01:00' + interval '3 hours'time '04:00:00'
- - interval '23 hours'interval '-23:00:00'
- date '2001-10-01' - date '2001-09-28'integer '3' (days)
- date '2001-10-01' - integer '7'date '2001-09-24'
- date '2001-09-28' - interval '1 hour'timestamp '2001-09-27 23:00:00'
- time '05:00' - time '03:00'interval '02:00:00'
- time '05:00' - interval '2 hours'time '03:00:00'
- timestamp '2001-09-28 23:00' - interval '23 hours'timestamp '2001-09-28 00:00:00'
- interval '1 day' - interval '1 hour'interval '1 day -01:00:00'
- timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00'interval '1 day 15:00:00'
* 900 * interval '1 second'interval '00:15:00'
* 21 * interval '1 day'interval '21 days'
* double precision '3.5' * interval '1 hour'interval '03:30:00'
/ interval '1 hour' / double precision '1.5'interval '00:40:00'

日付/時刻関数

関数戻り値の型説明例結果
age(timestamp, timestamp) interval引数を減算した後の「記号化」された結果。日だけでなく、年と月を使用しますage(timestamp '2001-04-10', timestamp '1957-06-13')43 years 9 mons 27 days
age(timestamp)intervalからcurrent_date引数を減算した結果(真夜中時点)age(timestamp '1957-06-13')43 years 8 mons 3 days
clock_timestamp() timestamp with time zone実時計の現在のタイムスタンプ(ステートメント実行時に変化)  
current_date date現在の日付;  
current_time time with time zone当日の時刻;  
current_timestamp timestamp with time zone現在のトランザクション開始時のタイムスタンプ;  
date_part(text, timestamp) double precisionサブフィールドを取得(以下と同等:extract); date_part('hour', timestamp '2001-02-16 20:38:40')20
date_part(text, interval)double precisionサブフィールドを取得(以下と同等:extract); date_part('month', interval '2 years 3 months')3
date_trunc(text, timestamp) timestamp指定された精度に切り捨て;date_trunc('hour', timestamp '2001-02-16 20:38:40')2001-02-16 20:00:00
date_trunc(text, interval)interval指定された精度に切り詰め、date_trunc('hour', interval '2 days 3 hours 40 minutes')2 days 03:00:00
extract(field from timestamp) double precisionサブフィールドを取得;extract(hour from timestamp '2001-02-16 20:38:40')20
extract(field from interval)double precisionサブフィールドを取得;extract(month from interval '2 years 3 months')3
isfinite(date) boolean有限の日付かどうかをテスト(+/-無限大ではない)isfinite(date '2001-02-16')true
isfinite(timestamp)boolean有限のタイムスタンプかどうかをテスト(+/-無限大ではない)isfinite(timestamp '2001-02-16 21:28:30')true
isfinite(interval)boolean有限の時間間隔かどうかをテストisfinite(interval '4 hours')true
justify_days(interval) interval30日間の期間を月として表すように時間間隔を調整justify_days(interval '35 days')1 mon 5 days
justify_hours(interval) interval24時間の期間を日として表すように時間間隔を調整justify_hours(interval '27 hours')1 day 03:00:00
justify_interval(interval) interval使用してjustify_daysとjustify_hours時間間隔を調整すると同時に正負の符号も調整justify_interval(interval '1 mon -1 hour')29 days 23:00:00
localtime time当日の時刻;  
localtimestamp timestamp現在のトランザクション開始時のタイムスタンプ;  
make_date(year int, month int, day int) date年、月、日のフィールドから日付を作成make_date(2013, 7, 15)2013-07-15
make_interval(years int DEFAULT 0, months int DEFAULT 0, weeks int DEFAULT 0, days int DEFAULT 0, hours int DEFAULT 0, mins int DEFAULT 0, secs double precision DEFAULT 0.0) interval年、月、週、日、時、分、秒のフィールドから間隔を作成make_interval(days := 10)10 days
make_time(hour int, min int, sec double precision) time時、分、秒のフィールドから時刻を作成make_time(8, 15, 23.5)08:15:23.5
make_timestamp(year int, month int, day int, hour int, min int, sec double precision) timestamp年、月、日、時、分、秒のフィールドからタイムスタンプを作成make_timestamp(2013, 7, 15, 8, 15, 23.5)2013-07-15 08:15:23.5
make_timestamptz(year int, month int, day int, hour int, min int, sec double precision, [ timezone text ]) timestamp with time zone年、月、日、時、分、秒のフィールドからタイムゾーン付きのタイムスタンプを作成。 指定がない場合timezoneは、現在のタイムゾーンを使用します。make_timestamptz(2013, 7, 15, 8, 15, 23.5)2013-07-15 08:15:23.5+01
now() timestamp with time zone現在のトランザクション開始時のタイムスタンプ;  
statement_timestamp() timestamp with time zone実時計の現在のタイムスタンプ;  
timeofday() textとclock_timestamp同じですが、結果はtext文字列です;  
transaction_timestamp() timestamp with time zone現在のトランザクション開始時のタイムスタンプ;  
その他の拡張