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

生年月日だけが保存されたMySQLテーブルから30歳以上の従業員を抽出する方法

はじめに

テーブルに生年月日(DOB)の情報しか保存されていない場合でも、DATEDIFF() 関数を活用すれば、現在の日付と生年月日の差分から年齢を計算し、特定の年齢以上の従業員を簡単に抽出できます。

ここでは、次のようなサンプルテーブル「emp_tbl」を使って具体的な手順を説明します。

mysql> Select * from emp_tbl;
+--------+------------+
| Name   | DOB        |
+--------+------------+
| Gaurav | 1984-01-17 |
| Gaurav | 1990-01-17 |
| Rahul  | 1980-05-22 |
| Gurdas | 1981-05-25 |
| Naveen | 1991-04-25 |
| Sohan  | 1987-12-26 |
+--------+------------+
6 rows in set (0.00 sec)

30歳以上の従業員を検索するクエリ

年齢を求めるには、SYSDATE()(現在日時)と DOB(生年月日)の差を DATEDIFF() で取得し、それを 365 で割ります。この計算結果が 30 より大きいレコードを WHERE 句で絞り込むことで、30歳を超える従業員だけを取り出せます。

mysql> SELECT Name, SYSDATE(), DOB,
       DATEDIFF(SYSDATE(), DOB)/365 AS AGE
       FROM emp_tbl
       WHERE (DATEDIFF(SYSDATE(), DOB)/365) > 30;
+--------+---------------------+------------+---------+
| Name   | SYSDATE()           | DOB        | AGE     |
+--------+---------------------+------------+---------+
| Gaurav | 2017-12-26 22:33:24 | 1984-01-17 | 33.9644 |
| Rahul  | 2017-12-26 22:33:24 | 1980-05-22 | 37.6219 |
| Gurdas | 2017-12-26 22:33:24 | 1981-05-25 | 36.6137 |
| Sohan  | 2017-12-26 22:33:24 | 1987-12-26 | 30.0219 |
+--------+---------------------+------------+---------+
4 rows in set (0.10 sec)

結果のポイント

  • 6件のデータのうち、計算上の年齢が30歳を超えているのは Gaurav、Rahul、Gurdas、Sohan の4名です。
  • Naveen(1991年生まれ)と Gaurav(1990年生まれ)は基準日時点で30歳未満のため、結果には含まれていません。

より正確な年齢を求めたい場合

365 で割る方法は、閏年の影響などによりわずかな誤差が生じます。満年齢を正確に取得したい場合は、TIMESTAMPDIFF() 関数を使うのがおすすめです。

mysql> SELECT Name, DOB,
       TIMESTAMPDIFF(YEAR, DOB, CURDATE()) AS AGE
       FROM emp_tbl
       WHERE TIMESTAMPDIFF(YEAR, DOB, CURDATE()) > 30;

このように DATEDIFF でも簡易的な年齢判定は可能ですが、実務では TIMESTAMPDIFF を使った方が精度の高い処理を実現できます。

  1. MySQLで1980年〜1996年生まれのユーザーの割合(パーセンテージ)を求める方法

    MySQLでは、SUM()関数とCOUNT()関数を組み合わせることで、特定の条件に該当するレコードの割合(パーセンテージ)を簡単に算出できます。この記事では、生年月日が1980年から1996年の間であるユーザーの割合を求める方法を、具体的なサンプルとともに分かりやすく解説します。サンプルテーブルの作成まず、デモ用のテーブルを作成しましょう。mysql> create table DemoTable-> (-> DateOfBirth varchar(100)-> );Query OK, 0 rows affected (0.55 sec)データの挿入次に、INSERT

  2. MySQLで現在の日付とテーブル内の日付レコードの差を求める方法

    現在の日付とテーブルに保存された日付レコードの差(日数)を求めるには、MySQLの DATEDIFF() 関数を使用します。この関数は、2つの日付の差を日数で返してくれる便利な関数です。ここでは、実際にテーブルを作成し、データを挿入して、現在の日付との差を計算する手順を順番に見ていきましょう。1. テーブルの作成まず、日付型のカラムを持つテーブルを作成します。mysql> create table DemoTable1446-> (-> DueDate date-> );Query OK, 0 rows affected (1.42 sec)2. レコードの挿入次に、I