2つの日付の差を計算する【PostgreSQL】

PostgreSQL構文

概要

二つの日付から経過した年月日を計算するにはage関数を使用します。

結果は次の例のようにinterval値(XX years XX mons XX days)という値になります。

--誕生日から年齢を計算する
age( 新しいほうの日付 , 古いほうの日付 ) 

-- 実行例 ※日付の前の「timestamp」という文字は必要なので、そのまま記述して下さい。
select age(timestamp '2020/1/1',timestamp '1990/1/1');   -- 30 years
select age(timestamp '2020/1/1',timestamp '1995/12/1');  -- 24 years 1 mon
select age(timestamp '2020/1/11',timestamp '1998/4/1');  -- 21 years 9 mons 10 days

 

 

実行例(呼び出し例)

上のままでは少々使いづらいので、年、月、日付だけ取得する例です。

例えば「21 years 9 mons 10 days」なら年の21、月の9だけ、日の10だけ取得する方法です。

--2つの日付から経過した年だけを取得
select date_part('year',age(timestamp '2020/1/1',timestamp '1990/1/1'));   -- 30
select date_part('year',age(timestamp '2020/1/1',timestamp '1995/12/1'));  -- 24
select date_part('year',age(timestamp '2020/1/11',timestamp '1998/4/1'));  -- 21

--2つの日付から経過した月だけを取得
select date_part('month',age(timestamp '2020/1/1',timestamp '1990/1/1'));   -- 0
select date_part('month',age(timestamp '2020/1/1',timestamp '1995/12/1'));  -- 1
select date_part('month',age(timestamp '2020/1/11',timestamp '1998/4/1'));  -- 9

--2つの日付から経過した日だけを取得
select date_part('day',age(timestamp '2020/1/1',timestamp '1990/1/1'));   -- 0
select date_part('day',age(timestamp '2020/1/1',timestamp '1995/12/1'));  -- 0
select date_part('day',age(timestamp '2020/1/11',timestamp '1998/4/1'));  -- 10