MySQLで生年月日から年齢範囲(20〜21歳)に該当する学生レコードを抽出するクエリ
BETWEEN演算子で日付の範囲に合致するレコードを取得する
特定の日付範囲に含まれるレコードを取得したい場合は、MySQLのBETWEEN演算子を使います。この記事では、生年月日(StudentDateOfBirth)から現在の年齢を計算し、「20歳〜21歳」の範囲に該当する学生レコードを抽出するクエリを、テーブル作成から順を追って解説します。
ステップ1:サンプルテーブルを作成する
まず、生年月日をDATE型で格納するテーブルを作成します。
mysql> create table DemoTable863(StudentDateOfBirth date);
Query OK, 0 rows affected (0.56 sec)
ステップ2:INSERT文でレコードを挿入する
続いて、INSERT文を使ってサンプルデータを登録します。
mysql> insert into DemoTable863 values('1998-01-10');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable863 values('2000-10-15');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable863 values('2003-04-20');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable863 values('2005-12-31');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable863 values('1999-07-01');
Query OK, 1 row affected (0.27 sec)ステップ3:登録済みレコードを確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable863;
上記のクエリを実行すると、次のような出力が得られます。
+--------------------+
| StudentDateOfBirth |
+--------------------+
| 1998-01-10 |
| 2000-10-15 |
| 2003-04-20 |
| 2005-12-31 |
| 1999-07-01 |
+--------------------+
5 rows in set (0.00 sec)
ステップ4:年齢が20歳〜21歳の学生だけを抽出する
ここが本題となるクエリです。YEAR(NOW()) - YEAR(StudentDateOfBirth)で「現在の年 − 生まれた年」から概算年齢を求め、その値がBETWEENによって20以上21以下の範囲に収まるレコードのみを取得しています。
mysql> select *from DemoTable863 where (YEAR(NOW()) - YEAR(StudentDateOfBirth)) BETWEEN 20 AND 21;
実行すると、条件に該当する学生の生年月日だけが出力されます。
+--------------------+
| StudentDateOfBirth |
+--------------------+
| 1998-01-10 |
| 1999-07-01 |
+--------------------+
2 rows in set (0.03 sec)
補足:より正確な年齢判定にはTIMESTAMPDIFFが便利
YEAR()同士の引き算による計算は、「今年の誕生日がまだ来ていない場合」でも実際より1歳多く数えてしまうことがあります。誕生日を正確に反映した年齢で絞り込みたい場合は、TIMESTAMPDIFF関数を使う方法がおすすめです。
mysql> select *from DemoTable863
-> where TIMESTAMPDIFF(YEAR, StudentDateOfBirth, NOW()) BETWEEN 20 AND 21;
両者の違いを理解したうえで使い分ければ、意図した通りの抽出結果が得られます。
-
MySQLで指定した2つの日付の間にあるレコードの合計値を取得する方法
はじめにMySQLで特定の2つの日付の間に存在するレコードの数値合計を求めたい場合は、BETWEENキーワードを使用します。BETWEEN句は、指定した範囲(開始日と終了日を含む)に該当するレコードを抽出できる便利な演算子です。この記事では、実際にテーブルを作成し、日付の範囲を指定して合計値を取得する手順を解説します。1. テーブルの作成まず、サンプル用のテーブルを作成します。ここでは「Value(数値)」と「PurchaseDate(購入日時)」というカラムを持つテーブルを定義します。mysql> create table DemoTable1444 -> ( -> V
-
MySQLクエリで現在の日付が特定の日付範囲内に含まれるかどうかを確認する方法
MySQLでは、CURDATE()関数と比較演算子を組み合わせることで、現在の日付が特定の日付範囲(開始日〜終了日)に含まれているかどうかを簡単に判定できます。この記事では、実際のサンプルコードを使いながら手順を解説します。 サンプルテーブルの作成 まず、開始日(StartDate)と終了日(EndDate)という2つのDATE型カラムを持つテーブルを作成しましょう。 mysql> create table DemoTable1448 -> ( -> StartDate date,