MySQLで生年月日から年齢を計算する方法【TIMESTAMPDIFF関数の使い方】
MySQLで生年月日から年齢を計算する方法
MySQLでは、TIMESTAMPDIFF() 関数を使うことで、生年月日から現在の年齢を簡単に計算できます。この記事では、テーブル作成からクエリ実行までの手順を、実際のサンプルコードとともにわかりやすく解説します。
基本構文
生年月日から年齢を計算するには、以下の構文を使用します。
SELECT TIMESTAMPDIFF(YEAR, yourColumnName, NOW()) AS anyAliasName FROM yourTableName;
TIMESTAMPDIFF() の第1引数には差分の単位(ここでは YEAR=年)を指定し、第2引数に開始日時(生年月日)、第3引数に終了日時を渡します。NOW() を指定することで、実行時点の日時との差分、つまり「現在の年齢」を求めることができます。
ステップ1:サンプルテーブルを作成する
まず、動作確認用のテーブルを作成しましょう。
mysql> CREATE TABLE DemoTable
(
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentDOB DATETIME
);
Query OK, 0 rows affected (0.61 sec)StudentId が主キー、StudentDOB が生年月日を格納するカラムです。
ステップ2:レコードを挿入する
INSERT文を使って、いくつかの生年月日データを登録します。
mysql> INSERT INTO DemoTable(StudentDOB) VALUES('1996-01-12');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable(StudentDOB) VALUES('1990-12-31');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable(StudentDOB) VALUES('1989-04-01');
Query OK, 1 row affected (0.45 sec)
mysql> INSERT INTO DemoTable(StudentDOB) VALUES('2000-06-17');
Query OK, 1 row affected (0.16 sec)ステップ3:登録したレコードを確認する
SELECT文でテーブル内のすべてのレコードを表示してみましょう。
mysql> SELECT * FROM DemoTable;
実行結果は以下の通りです。
+-----------+---------------------+ | StudentId | StudentDOB | +-----------+---------------------+ | 1 | 1996-01-12 00:00:00 | | 2 | 1990-12-31 00:00:00 | | 3 | 1989-04-01 00:00:00 | | 4 | 2000-06-17 00:00:00 | +-----------+---------------------+ 4 rows in set (0.00 sec)
ステップ4:生年月日から年齢を計算する
それでは、本題である年齢計算のクエリを実行します。
mysql> SELECT TIMESTAMPDIFF(YEAR, StudentDOB, NOW()) AS AGE FROM DemoTable;
実行結果は以下の通りです。
+------+ | AGE | +------+ | 23 | | 28 | | 30 | | 18 | +------+ 4 rows in set (0.03 sec)
各レコードの生年月日に基づいて、正しく年齢が計算されていることが確認できます。
補足:年齢計算のポイント
- NOW() の代わりに CURDATE() を使っても同じ結果が得られます。時刻情報が不要な場合は CURDATE() のほうが意図が伝わりやすいでしょう。
- TIMESTAMPDIFF(YEAR, ...) は、今年の誕生日がまだ来ていない場合も自動的に考慮され、「満年齢」に相当する値を返します。DATEDIFF() を365で割る手法と異なり、うるう年や誕生日未到来のケースでもずれが発生しません。
ユーザーの会員情報や学生名簿など、生年月日から年齢を表示したい場面は多くあります。TIMESTAMPDIFF() を活用すれば、アプリケーション側で計算する必要なく、SQLだけで正確な年齢を取得できるので、ぜひ覚えておきましょう。
-
MySQLでタイムスタンプ(UNIX時間)から日付のみを表示する方法
タイムスタンプ(UNIX時間)の値から日付を表示するには、MySQLのFROM_UNIXTIME()関数を使用します。この関数は、UNIXタイムスタンプを「YYYY-MM-DD HH:MM:SS」形式の日時に変換してくれます。ここでは、実際にテーブルを作成し、動作を確認していきましょう。 サンプルテーブルの作成 まず、タイムスタンプ値を格納するためのテーブルを作成します。 mysql> create table DemoTable -> ( -> timestampValue bigint -> ); Query OK, 0 rows affe
-
MySQLで日付形式から数値の日付値を抽出する方法
MySQLで日付形式から数値の日付値を抽出する方法MySQLで「31-Jan-19」のような文字列として保存された日付データを数値(UNIXタイムスタンプ)に変換したい場合は、UNIX_TIMESTAMP() 関数と STR_TO_DATE() 関数を組み合わせて使用します。基本的な構文は以下の通りです。select UNIX_TIMESTAMP(STR_TO_DATE(yourColumnName, %d-%b-%y)) as anyAliasName from yourTableName;サンプルテーブルの作成まず、動作確認用のテーブルを作成します。mysql> create tab