概要
二つの日付から経過した年月日を計算するには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