$ 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
| name | hired_on | kinzoku | kinzoku_nen |
|---|---|---|---|
| 清水 | 2013-04-01 | 13 years | 13 |
| 鈴木 | 2014-04-01 | 12 years | 12 |
| 山田 | 2015-04-01 | 11 years | 11 |
| 山本 | 2016-04-01 | 10 years | 10 |
| 佐藤 | 2016-10-01 | 9 years 6 mons | 9 |
| 伊藤 | 2017-04-01 | 9 years | 9 |
| 加藤 | 2018-04-01 | 8 years | 8 |
| 田中 | 2019-04-01 | 7 years | 7 |
18 行(うち 8 行を表示)
基準日を書くことで、いつ実行しても同じ結果になります。
SELECT DATE '2026-04-01' - DATE '2025-04-01' AS nissuu, AGE(DATE '2026-04-01', DATE '2025-04-01') AS interval_de
| nissuu | interval_de |
|---|---|
| 365 | 1 year |
1 行
引き算は日数(整数)、AGE は年月日のまとまりを返します。
説明
AGE は 2 つの日付の差を、「何年何か月何日」という形(interval 型)で返します。単純な日数ではなく、暦を考えた差なので、勤続年数や年齢の計算に向いています。
⚠️ 引数 1 つの AGE(日付) は現在時刻を使います。同じ問い合わせでも、実行する日によって結果が変わります。結果を再現したい場面(テスト・帳票・この種のリファレンス)では、基準日を明示した 2 引数の形を使ってください。
年だけがほしいなら EXTRACT(YEAR FROM AGE(...)) と組み合わせます。単純な日数がほしいなら AGE ではなく日付どうしの引き算(日付 - 日付)のほうが素直です。
⚠️ AGE は PostgreSQL 固有です。標準 SQL にはありません。
次に読む
使い方を順に読むなら
根拠にした一次情報
- PostgreSQL 18 マニュアル: 日付/時刻関数と演算子(2026-09-02 確認)