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)) = 2019 と MONTH(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や比較演算子)を活用しましょう。月別の売上集計や期間レポートなど、日常的な業務クエリでぜひ活用してください。
-
MySQLで日付データから月の初日と末日を取得する方法
MySQLでは、日付型のカラムから「その月の最初の日」と「最後の日」を簡単に求めることができます。この記事では、実際にテーブルを作成し、サンプルデータを使いながら具体的な手順を解説します。1. テーブルの作成まず、日付を格納するためのテーブルを作成します。mysql> create table DemoTable -> ( -> DueDate date -> ); Query OK, 0 rows affected (0.73 sec)2. レコードの挿入次に、INSERT文を使ってテーブルにいくつかのレコードを挿入します。mysql>
-
MySQLで特定の月と年に基づいてレコードを取得する方法
MySQLで特定の月と年に基づいてレコードを取得する方法日付データから特定の月と年に該当するレコードだけを抽出したい場合、MySQLの MONTH() 関数と YEAR() 関数を組み合わせて使用します。ここでは、実際にテーブルを作成し、データを挿入して、条件に合うレコードを取得するまでの手順を具体的に解説します。1. サンプルテーブルの作成まず、日付型(DATE)のカラムを持つテーブルを作成します。mysql> create table DemoTable1846 ( PurchaseDat