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

MySQLで特定の月と年のレコードを抽出する方法(YEAR()・MONTH()関数の使い方)

はじめに

MySQLで特定の月と年に該当するレコードだけを取り出したい場合は、YEAR() 関数と MONTH() 関数を組み合わせて使用します。これらの関数は、日付型のカラムからそれぞれ「年」と「月」を数値として抽出できるため、WHERE句での条件指定に非常に便利です。

本記事では、実際にテーブルを作成し、データを挿入してから、特定の年月のレコードを抽出するまでの手順を順番に解説します。

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

まず、顧客の購入情報を管理するテーブルを作成します。顧客ID、顧客名、請求額、購入日を持つシンプルな構造です。

mysql> create table DemoTable
    (
    CustomerId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    CustomerName varchar(20),
    CustomerTotalBill int,
    PurchasingDate date
    );
Query OK, 0 rows affected (0.83 sec)

2. テストデータの挿入

INSERT文を使って、複数の年月にまたがるレコードを登録します。ここでは2016年から2019年までのデータを用意しました。

mysql> insert into DemoTable(CustomerName,CustomerTotalBill,PurchasingDate) values('John',2000,'2019-01-21');
Query OK, 1 row affected (0.12 sec)

mysql> insert into DemoTable(CustomerName,CustomerTotalBill,PurchasingDate) values('Chris',1000,'2019-01-31');
Query OK, 1 row affected (0.21 sec)

mysql> insert into DemoTable(CustomerName,CustomerTotalBill,PurchasingDate) values('Robert',4500,'2018-01-01');
Query OK, 1 row affected (0.24 sec)

mysql> insert into DemoTable(CustomerName,CustomerTotalBill,PurchasingDate) values('Sam',5500,'2017-02-12');
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable(CustomerName,CustomerTotalBill,PurchasingDate) values('Carol',500,'2016-01-12');
Query OK, 1 row affected (0.17 sec)

3. 登録データの確認

SELECT文ですべてのレコードを表示して、正しく登録されているかを確認しましょう。

mysql> select *from DemoTable;

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

+------------+--------------+-------------------+----------------+
| CustomerId | CustomerName | CustomerTotalBill | PurchasingDate |
+------------+--------------+-------------------+----------------+
| 1          | John         | 2000              | 2019-01-21     |
| 2          | Chris        | 1000              | 2019-01-31     |
| 3          | Robert       | 4500              | 2018-01-01     |
| 4          | Sam          | 5500              | 2017-02-12     |
| 5          | Carol        | 500               | 2016-01-12     |
+------------+--------------+-------------------+----------------+
5 rows in set (0.00 sec)

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

いよいよ本題です。YEAR(DATE(PurchasingDate)) = 2019MONTH(DATE(PurchasingDate)) = 01 を条件として指定することで、「2019年1月」に該当するレコードのみを取得できます。

mysql> select *from DemoTable WHERE YEAR(DATE(PurchasingDate))=2019 AND MONTH(DATE(PurchasingDate)) = 01;

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

+------------+--------------+-------------------+----------------+
| CustomerId | CustomerName | CustomerTotalBill | PurchasingDate |
+------------+--------------+-------------------+----------------+
| 1          | John         | 2000              | 2019-01-21     |
| 2          | Chris        | 1000              | 2019-01-31     |
+------------+--------------+-------------------+----------------+
2 rows in set (0.03 sec)

ご覧のとおり、2019年1月に購入された John さんと Chris さんの2件だけが抽出されました。

補足:より効率的な書き方

カラムに関数を適用するとインデックスが利用できず、大量データの場合はパフォーマンスが低下することがあります。そのような場合は、範囲指定による検索がおすすめです。

mysql> select *from DemoTable
    WHERE PurchasingDate >= '2019-01-01'
      AND PurchasingDate < '2019-02-01';

この方法なら、PurchasingDate カラムにインデックスを張っておけば高速に検索できます。用途やデータ量に応じて使い分けるとよいでしょう。

まとめ

MySQLで特定の月と年のレコードを取得するには、YEAR()関数MONTH()関数をWHERE句で組み合わせるのが最もシンプルな方法です。一方、パフォーマンスを重視する場合は日付の範囲指定(BETWEENや比較演算子)を活用しましょう。月別の売上集計や期間レポートなど、日常的な業務クエリでぜひ活用してください。

  1. MySQLで日付データから月の初日と末日を取得する方法

    MySQLでは、日付型のカラムから「その月の最初の日」と「最後の日」を簡単に求めることができます。この記事では、実際にテーブルを作成し、サンプルデータを使いながら具体的な手順を解説します。1. テーブルの作成まず、日付を格納するためのテーブルを作成します。mysql> create table DemoTable -> ( -> DueDate date -> ); Query OK, 0 rows affected (0.73 sec)2. レコードの挿入次に、INSERT文を使ってテーブルにいくつかのレコードを挿入します。mysql>

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

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