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

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だけで正確な年齢を取得できるので、ぜひ覚えておきましょう。

  1. MySQLでタイムスタンプ(UNIX時間)から日付のみを表示する方法

    タイムスタンプ(UNIX時間)の値から日付を表示するには、MySQLのFROM_UNIXTIME()関数を使用します。この関数は、UNIXタイムスタンプを「YYYY-MM-DD HH:MM:SS」形式の日時に変換してくれます。ここでは、実際にテーブルを作成し、動作を確認していきましょう。 サンプルテーブルの作成 まず、タイムスタンプ値を格納するためのテーブルを作成します。 mysql> create table DemoTable -> ( -> timestampValue bigint -> ); Query OK, 0 rows affe

  2. 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