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