コマンド道場

$ man age

AGE

日付・時刻関数

2 つの日付の差を、年・月・日のまとまりで返す。引数 1 つの形は現在時刻に依存する。

呼び出しの形

AGE(新しい日付, 古い日付)
AGE(日付)

つまずきやすいところ

  • 引数 1 つの AGE(日付) は現在時刻を使います。 実行する日で結果が変わるので、再現したいなら 2 引数の形で基準日を書いてください。

  • 戻り値は interval です。数値として比べたいなら EXTRACT で取り出してください。

  • PostgreSQL 固有です。他の製品では日付の引き算や専用関数に書き換えが要ります。

実行例

結果は実際に流したものです。同じ SQL を 自由に打てる画面 で試すと、同じ結果になります。

基準日を決めて勤続年数を求める
SELECT name, hired_on, AGE(DATE '2026-04-01', hired_on) AS kinzoku, EXTRACT(YEAR FROM AGE(DATE '2026-04-01', hired_on)) AS kinzoku_nen FROM shain ORDER BY hired_on
namehired_onkinzokukinzoku_nen
清水2013-04-0113 years13
鈴木2014-04-0112 years12
山田2015-04-0111 years11
山本2016-04-0110 years10
佐藤2016-10-019 years 6 mons9
伊藤2017-04-019 years9
加藤2018-04-018 years8
田中2019-04-017 years7

18(うち 8 行を表示)

基準日を書くことで、いつ実行しても同じ結果になります。

日数と interval の違い
SELECT DATE '2026-04-01' - DATE '2025-04-01' AS nissuu, AGE(DATE '2026-04-01', DATE '2025-04-01') AS interval_de
nissuuinterval_de
3651 year

1

引き算は日数(整数)、AGE は年月日のまとまりを返します。

説明

AGE は 2 つの日付の差を、「何年何か月何日」という形(interval 型)で返します。単純な日数ではなく、暦を考えた差なので、勤続年数や年齢の計算に向いています。

⚠️ 引数 1 つの AGE(日付) は現在時刻を使います。同じ問い合わせでも、実行する日によって結果が変わります。結果を再現したい場面(テスト・帳票・この種のリファレンス)では、基準日を明示した 2 引数の形を使ってください。

年だけがほしいなら EXTRACT(YEAR FROM AGE(...)) と組み合わせます。単純な日数がほしいなら AGE ではなく日付どうしの引き算日付 - 日付)のほうが素直です。

⚠️ AGEPostgreSQL 固有です。標準 SQL にはありません。

次に読む

根拠にした一次情報