ブログに戻る
2 min read

SQL で年齢を計算する方法 (PostgreSQL、MySQL、SQL Server)

生年月日から年齢を計算するための実用的な SQL パターンを学びます。完済年数、正確な年と月、特定の日の年齢です。 PostgreSQL、MySQL、SQL Server の例が含まれています。

SQL で年齢を計算する方法 (PostgreSQL、MySQL、SQL Server)

生年月日からSQLで年齢を計算する必要がありますか?このガイドでは、一般的なデータベースに対する実用的なコピー準備完了クエリを示します。次の計算方法を学びます:

  • 年齢(完遂年数)
  • 特定の日付時点の年齢(今日だけではありません)
  • 詳細が必要な場合の正確なスタイル出力 (年と月)

1) ユースケースにとって「年齢」が何を意味するかを決定する

ほとんどのビジネス ロジックでは、完了年数を使用します。つまり、2000 年 6 月 10 日に生まれた人は、それ以前ではなく、2026 年 6 月 10 日に 25 歳になります。 YEAR(今日) - YEAR(生年月日) のような単純な年の引き算は、誕生日の前では間違っているため注意してください。

2) PostgreSQL: 経過年数 (完了年数)

PostgreSQL には、間隔を返す age() 関数が組み込まれています。次のように完全な年を抽出します:

SELECT EXTRACT(年齢(CURRENT_DATE, 生年月日)からの年) AS age_years
人々から;

PostgreSQL: 特定の日付時点での経過時間

SELECT EXTRACT(YEAR FROM age(DATE '2026-02-23', dob)) AS age_years
人々から;

3) MySQL: 経過年数 (完了年数)

MySQL では、TIMESTAMPDIFF:

を使用します
SELECT TIMESTAMPDIFF(YEAR, dob, CURDATE()) AS age_years
人々から;

MySQL: 特定の日付時点での経過時間

SELECT TIMESTAMPDIFF(YEAR, 生年月日, DATE('2026-02-23')) AS age_years
人々から;

4) SQL Server: 経過年数 (完了年数)

SQL Server の一般的なパターンは、DATEDIFF から誕生日のチェックを引いたものです:

SELECT
  DATEDIFF(年, 日付, CAST(GETDATE() AS 日付))
  - ケース
      WHEN DATEADD(YEAR, DATEDIFF(YEAR, dob, CAST(GETDATE() AS date)), dob) > CAST(GETDATE() AS date)
      その後 1 その他 0
    age_year までに終了
人々から;

SQL Server: 特定の日付時点での有効期限

@as_of date = '2026-02-23'; を宣言してください。
選択
  DATEDIFF(年、生年月日、@as_of)
  - ケース
      WHEN DATEADD(YEAR, DATEDIFF(YEAR, dob, @as_of), dob) > @as_of
      その後 1 その他 0
    age_year までに終了
人々から;

5) 正確な年齢 (年と月) の例

「31 歳 4 か月」のような「正確な」表現が必要な場合は、最初に年を計算し、次に最後の誕生日からの月数を計算します。 PostgreSQL の例を次に示します:

ベース AS 付き (
  SELECT データベース、CURRENT_DATE AS as_of
  人々から
)
選択
  EXTRACT(YEAR FROM age(as_of, dob)) AS 年、
  EXTRACT(MONTH FROM age(as_of, dob)) AS 月
ベースから;

よくある落とし穴

  • タイムゾーン: 可能な場合は生年月日を日付として保存します。日時はゾーン間で変わる可能性があります。
  • 閏日の誕生日: 閏年以外の日に何が起こるかを定義します。ほとんどのシステムは、ポリシーに応じて、2004 年 2 月 29 日の誕生日を 02 月 28 日または 03 月 1 日として扱います。
  • Null または将来の DOB: フィルタまたはガード、それ以外の場合クエリは null または負の値を返します。

簡単な健全性チェック

単一の生年月日をすぐに確認したい場合は、オンライン計算機を使用できます: オンラインで年齢を計算する

関連ガイド

よくある質問

YEAR(今日) から YEAR(生年月日) を引くのはなぜ間違っていますか?

今年の誕生日がまだあるかどうかは無視されるため、誕生日前の年齢が誇張されています。

生年月日の最も安全な SQL タイプは何ですか?

暦日のみを考慮する場合は、DOB に 日付 列(日時ではない)を使用します。