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

MySQLで特定の月と年のレコードを抽出するSELECTクエリの書き方

MySQLで特定の月と年のレコードを取得する方法

MySQLで日付データから特定の月のレコードを抽出するには MONTH() 関数を、特定の年のレコードを抽出するには YEAR() 関数を使用します。これらの関数を WHERE 句で組み合わせることで、「2019年9月」のような具体的な条件でデータを絞り込むことができます。

実際にサンプルテーブルを作成して、動作を確認していきましょう。

1. サンプルテーブルの作成

まず、学生名と入学日を格納するテーブルを作成します。

mysql> create table DemoTable
(
    StudentName varchar(40),
    StudentAdmissionDate date
);
Query OK, 0 rows affected (0.67 sec)

2. テストデータの挿入

INSERT 文を使って、いくつかのレコードを登録します。

mysql> insert into DemoTable values('Chris','2019-01-21');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('Robert','2018-09-05');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('Mike','2019-09-05');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable values('David','2019-10-04');
Query OK, 1 row affected (0.14 sec)

3. 登録されたレコードの確認

SELECT 文ですべてのレコードを表示してみます。

mysql> select *from DemoTable;

実行結果は以下の通りです。

+-------------+----------------------+
| StudentName | StudentAdmissionDate |
+-------------+----------------------+
| Chris       | 2019-01-21           |
| Robert      | 2018-09-05           |
| Mike        | 2019-09-05           |
| David       | 2019-10-04           |
+-------------+----------------------+
4 rows in set (0.00 sec)

4. 特定の月と年でレコードを抽出するクエリ

ここからが本題です。「2019年9月」に該当するレコードを取得するには、次のように MONTH()YEAR() を組み合わせた条件を指定します。

mysql> select *from DemoTable where month(StudentAdmissionDate)=09 and year(StudentAdmissionDate)=2019;

実行結果は以下の通りです。

+-------------+----------------------+
| StudentName | StudentAdmissionDate |
+-------------+----------------------+
| Mike        | 2019-09-05           |
+-------------+----------------------+
1 row in set (0.00 sec)

このように、入学日が「2019年9月」である Mike のレコードだけが抽出されました。Robert の「2018-09-05」は月は同じ9月でも年が異なるため除外され、David の「2019-10-04」は年は同じでも月が異なるため除外されていることがわかります。

補足:パフォーマンスに関する注意点

MONTH()YEAR() を WHERE 句で使用すると、インデックスがあっても関数適用によりフルスキャンになる場合があります。大量のデータを扱う場合は、次のように範囲検索に書き換えるとインデックスを有効活用できます。

mysql> select *from DemoTable 
    -> where StudentAdmissionDate >= '2019-09-01' 
    -> and StudentAdmissionDate < '2019-10-01';

用途に応じて、可読性重視なら MONTH()/YEAR()、パフォーマンス重視なら範囲検索と使い分けるのがおすすめです。

  1. MySQLでSELECTクエリを使用してデータを挿入(INSERT)する方法

    MySQLでは、INSERT文とSELECTクエリを組み合わせることで、テーブルにデータを挿入することができます。通常、SELECTは既存のテーブルからデータを取得するために使われますが、値を直接指定してINSERTを実行する際にも活用できる便利な手法です。基本構文SELECTクエリを使用してINSERTを実行する場合の構文は以下の通りです。insert into yourTableName(yourColumnName1,yourColumnName2,yourColumnName3,...N) select yourValue1,yourValue2,yourValue3,......N;

  2. MySQLで特定の月と年に基づいてレコードを取得する方法

    MySQLで特定の月と年に基づいてレコードを取得する方法日付データから特定の月と年に該当するレコードだけを抽出したい場合、MySQLの MONTH() 関数と YEAR() 関数を組み合わせて使用します。ここでは、実際にテーブルを作成し、データを挿入して、条件に合うレコードを取得するまでの手順を具体的に解説します。1. サンプルテーブルの作成まず、日付型(DATE)のカラムを持つテーブルを作成します。mysql> create table DemoTable1846     (     PurchaseDat