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

MySQLで生年月日から年齢を計算する方法をわかりやすく解説

MySQLでは、生年月日(Date of Birth)のデータから現在の年齢を簡単に計算することができます。この記事では、YEAR()関数とRIGHT()関数を組み合わせた実用的な方法を、実際のサンプルコードとともに詳しく解説します。

年齢計算に使うSQL構文

生年月日から年齢を求めるには、以下のような構文を使用します。

SELECT YEAR(CURRENT_TIMESTAMP) - YEAR(yourColumnName)
- (RIGHT(CURRENT_TIMESTAMP, 5) < RIGHT(yourColumnName, 5)) as anyVariableName from yourTableName;

このクエリのポイントは、単純に「現在の年 − 誕生年」を計算するだけでなく、RIGHT(CURRENT_TIMESTAMP, 5) < RIGHT(yourColumnName, 5)という条件式によって、今年まだ誕生日が来ていない場合に1歳差し引いている点です。これにより、正確な満年齢を求めることができます。

サンプルテーブルの作成

それでは、実際に動作を確認するためのテーブルを作成しましょう。以下がテーブル作成用のクエリです。

mysql> create table AgeCalculatesDemo
   -> (
   -> YourDateOfBirth datetime
   -> );
Query OK, 0 rows affected (0.50 sec)

テストデータの挿入

次に、INSERT文を使って生年月日のデータを登録します。ここではDATE_ADD()関数を使って、現在の日付から22年前・12年前・19年前の日付と、固定日付の「2010-04-05」を挿入しています。

mysql> insert into AgeCalculatesDemo values(date_add(now(),interval -22 year));
Query OK, 1 row affected (0.16 sec)

mysql> insert into AgeCalculatesDemo values(date_add(now(),interval -12 year));
Query OK, 1 row affected (0.18 sec)

mysql> insert into AgeCalculatesDemo values(date_add(now(),interval -19 year));
Query OK, 1 row affected (0.15 sec)

mysql> insert into AgeCalculatesDemo values('2010-4-05');
Query OK, 1 row affected (0.25 sec)

登録データの確認

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

mysql> select *from AgeCalculatesDemo;

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

+---------------------+
| YourDateOfBirth     |
+---------------------+
| 1996-12-06 23:35:26 |
| 2006-12-06 23:35:32 |
| 1999-12-06 23:35:42 |
| 2010-04-05 00:00:00 |
+---------------------+
4 rows in set (0.00 sec)

年齢を計算するクエリの実行

いよいよ、生年月日から年齢を計算するクエリを実行します。

mysql> SELECT YEAR(CURRENT_TIMESTAMP) - YEAR(YourDateOfBirth)
   -> - (RIGHT(CURRENT_TIMESTAMP, 5) < RIGHT(YourDateOfBirth, 5)) as YourAge
   -> from AgeCalculatesDemo;

実行すると、各レコードの年齢が正しく表示されます。

+---------+
| YourAge |
+---------+
|      22 |
|      12 |
|      19 |
|       8 |
+---------+
4 rows in set (0.00 sec)

まとめ

MySQLで生年月日から年齢を計算するには、「現在の年 − 誕生年」から、誕生日がまだ来ていない場合の調整分を引くのが基本です。紹介したクエリは1つのSQL文で完結するため、会員管理システムや顧客データベースなど、年齢情報が必要な場面で幅広く活用できます。なお、より厳密な日付比較を行いたい場合は、TIMESTAMPDIFF(YEAR, 生年月日, CURDATE())関数を使う方法もありますので、用途に応じて使い分けると良いでしょう。

  1. MySQLで基準日から30日より古い日付データを削除するクエリの書き方

    MySQLで特定の日付から30日以上前のレコードを削除する方法MySQLでは、ある基準日を起点として、そこから30日より古い日付データを持つレコードを削除できます。DELETE文とINTERVAL演算子を組み合わせることで、簡単に実装可能です。基本構文以下が基本的な構文です。delete from yourTableName where yourColumnName < (yourAnotherDateValue - INTERVAL 30 DAY);それでは、実際にサンプルテーブルを作成して動作を確認してみましょう。1. テーブルの作成まず、テスト用のテーブルを作成します。mysql>

  2. MySQLで当日の00:00から現在時刻までのレコードを抽出するクエリの書き方

    はじめにMySQLで「今日の日付の午前0時(00:00)から現在時刻まで」のレコードを取得したいケースはよくあります。例えば、現在の日時が 2019-09-14 08:50:10 である場合、2019-09-14 00:00:00 から 2019-09-14 08:50:10 までの範囲にあるレコードを抽出することになります。本記事では、実際にテーブルを作成し、データを挿入しながら、この条件を実現するクエリを具体的に解説します。サンプルテーブルの作成まず、DATETIME型のカラムを持つテーブルを作成します。mysql> create table DemoTable( &nbs