MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

【MySQL】生年月日(D.O.B)フィールドから年齢を計算して取得する方法

MySQLで生年月日(D.O.B)フィールドから年齢を求めるには、現在の日付から生年月日の「年」を差し引くのが基本となる考え方です。ここでは、CURDATE()関数とYEAR()関数を組み合わせた基本的な構文を紹介します。

基本の構文

SELECT yourColumnName1, yourColumnName2, ........N,
       YEAR(CURDATE()) - YEAR(yourDOBColumnName) AS anyVariableName
FROM yourTableName;

この構文では、現在の年(CURDATE()からYEAR()で抽出)から生年月日の年を引き算することで、おおよその年齢を算出しています。

サンプルテーブルの作成

まず、動作を確認するためのテーブルを作成しましょう。テーブル作成用のクエリは以下の通りです。

mysql> CREATE TABLE AgeDemo
-> (
-> StudentId int,
-> StudentName varchar(100),
-> StudentDOB date
-> );
Query OK, 0 rows affected (0.61 sec)

レコードの挿入

INSERTコマンドを使って、いくつかのレコードを挿入します。

mysql> INSERT INTO AgeDemo VALUES(1,'John','1998-10-1');
Query OK, 1 row affected (0.20 sec)

mysql> INSERT INTO AgeDemo VALUES(2,'Carol','1990-1-2');
Query OK, 1 row affected (0.14 sec)

mysql> INSERT INTO AgeDemo VALUES(3,'Sam','2000-12-1');
Query OK, 1 row affected (0.15 sec)

mysql> INSERT INTO AgeDemo VALUES(4,'Mike','2010-10-11');
Query OK, 1 row affected (0.18 sec)

登録データの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> SELECT * FROM AgeDemo;

実行結果は以下の通りです。

+-----------+-------------+------------+
| StudentId | StudentName | StudentDOB |
+-----------+-------------+------------+
| 1         | John        | 1998-10-01 |
| 2         | Carol       | 1990-01-02 |
| 3         | Sam         | 2000-12-01 |
| 4         | Mike        | 2010-10-11 |
+-----------+-------------+------------+
4 rows in set (0.00 sec)

生年月日から年齢を計算するクエリ

それでは、D.O.B(生年月日)から年齢を計算するクエリを見ていきましょう。

mysql> SELECT StudentName, StudentDOB,
       YEAR(CURDATE()) - YEAR(StudentDOB) AS StudentAge
FROM AgeDemo;

実行すると、各学生の年齢が次のように表示されます。

+-------------+------------+------------+
| StudentName | StudentDOB | StudentAge |
+-------------+------------+------------+
| John        | 1998-10-01 | 21         |
| Carol       | 1990-01-02 | 29         |
| Sam         | 2000-12-01 | 19         |
| Mike        | 2010-10-11 | 9          |
+-------------+------------+------------+
4 rows in set (0.03 sec)

より正確な年齢を求めるには:TIMESTAMPDIFFを使う

YEAR()同士の引き算はシンプルで分かりやすい反面、「今年の誕生日がまだ来ていない場合」でも1歳多くカウントされてしまう点に注意が必要です。例えば、誕生日が12月のSamの場合、実際にはまだ19歳になっていない可能性があります。

満年齢を正確に求めたい場合は、TIMESTAMPDIFF()関数を使用するのがおすすめです。

mysql> SELECT StudentName, StudentDOB,
       TIMESTAMPDIFF(YEAR, StudentDOB, CURDATE()) AS StudentAge
FROM AgeDemo;

TIMESTAMPDIFF(YEAR, 開始日付, 終了日付)は、2つの日付間の「完全な年数」を返す関数です。そのため、誕生日がまだ来ていない場合は自動的に1歳少なく計算され、日本で一般的な「満年齢」と同じ考え方で正確な年齢を取得できます。実務ではこちらの方法を採用するケースが多いため、用途に応じて使い分けるとよいでしょう。

  1. MySQLで他のカラムの値から新しいカラムの値を導出する方法

    MySQLではユーザー定義変数(ユーザー変数)を活用することで、既存のカラムの値をもとに別のカラムの値を計算・導出できます。本記事では、累積和(累積合計)を求める具体例を通して、その方法をわかりやすく解説します。サンプルテーブルの作成まず、テーブルを作成します。mysql> create table DemoTable1868 ( Value int ); Query OK, 0 rows affected (0.00 sec)レコードの挿入insertコマンドを使って、テーブルにデータを挿入します。mysql> insert into DemoTable1

  2. MySQLでテーブルから特定の行を抽出するクエリの書き方

    MySQLでは、WHERE句とORDER BY、LIMITを組み合わせることで、テーブルから条件に合致する特定の行だけを効率的に取得できます。本記事では、実際にサンプルテーブルを作成し、特定の行を抽出するクエリの実行手順をわかりやすく解説します。 1. サンプルテーブルの作成 まず、CREATE TABLE文を使ってサンプル用のテーブルを作成します。ここでは「Section(組)」と「StudentName(生徒名)」という2つのカラムを持つテーブルを用意しました。 mysql> create table DemoTable1972 ( Section char(1),