【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歳少なく計算され、日本で一般的な「満年齢」と同じ考え方で正確な年齢を取得できます。実務ではこちらの方法を採用するケースが多いため、用途に応じて使い分けるとよいでしょう。
-
MySQLで他のカラムの値から新しいカラムの値を導出する方法
MySQLではユーザー定義変数(ユーザー変数)を活用することで、既存のカラムの値をもとに別のカラムの値を計算・導出できます。本記事では、累積和(累積合計)を求める具体例を通して、その方法をわかりやすく解説します。サンプルテーブルの作成まず、テーブルを作成します。mysql> create table DemoTable1868 ( Value int ); Query OK, 0 rows affected (0.00 sec)レコードの挿入insertコマンドを使って、テーブルにデータを挿入します。mysql> insert into DemoTable1
-
MySQLでテーブルから特定の行を抽出するクエリの書き方
MySQLでは、WHERE句とORDER BY、LIMITを組み合わせることで、テーブルから条件に合致する特定の行だけを効率的に取得できます。本記事では、実際にサンプルテーブルを作成し、特定の行を抽出するクエリの実行手順をわかりやすく解説します。 1. サンプルテーブルの作成 まず、CREATE TABLE文を使ってサンプル用のテーブルを作成します。ここでは「Section(組)」と「StudentName(生徒名)」という2つのカラムを持つテーブルを用意しました。 mysql> create table DemoTable1972 ( Section char(1),