MySQLで特定の月のデータを抽出する方法|MONTH()関数の使い方を解説
MySQLでは、MONTH()関数を使うことで、日付データから「月」に基づいてレコードを簡単に抽出できます。本記事では、実際にテーブルを作成し、サンプルデータを挿入しながら、特定の月のデータを取得するクエリの書き方を順を追って解説します。
1. サンプルテーブルの作成
まず、ユーザーの投稿情報を格納するテーブルを作成しましょう。以下のようにCREATE TABLE文を実行します。
mysql> create table DemoTable -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> UserName varchar(10), -> UserPostMessageDate datetime, -> UserLikes int -> ); Query OK, 0 rows affected (0.77 sec)
このテーブルは、ユーザーID(Id)、ユーザー名(UserName)、投稿日時(UserPostMessageDate)、いいね数(UserLikes)の4つのカラムを持っています。
2. サンプルデータの挿入
次に、INSERT文を使って複数のレコードを登録します。投稿日時はあえて異なる月に設定しているのがポイントです。
mysql> insert into DemoTable(UserName,UserPostMessageDate,UserLikes)
values('John','2019-01-31',4560);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(UserName,UserPostMessageDate,UserLikes)
values('Sam','2019-06-28',790);
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable(UserName,UserPostMessageDate,UserLikes)
values('Carol','2019-05-01',230);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable(UserName,UserPostMessageDate,UserLikes)
values('David','2019-03-05',10000000);
Query OK, 1 row affected (0.33 sec)3. 登録データの確認
SELECT文ですべてのレコードを表示して、正しく挿入されているか確認しましょう。
mysql> select *from DemoTable;
出力結果
+----+----------+---------------------+-----------+ | Id | UserName | UserPostMessageDate | UserLikes | +----+----------+---------------------+-----------+ | 1 | John | 2019-01-31 00:00:00 | 4560 | | 2 | Sam | 2019-06-28 00:00:00 | 790 | | 3 | Carol | 2019-05-01 00:00:00 | 230 | | 4 | David | 2019-03-05 00:00:00 | 10000000 | +----+----------+---------------------+-----------+ 4 rows in set (0.00 sec)
4. 特定の月のデータを抽出するクエリ
ここからが本題です。特定の月のデータだけを取り出すには、WHERE句の中でMONTH()関数を使用します。例えば、「6月」に投稿されたデータを取得したい場合は、以下のようなクエリになります。
mysql> select Id,UserName,UserLikes from DemoTable where MONTH(UserPostMessageDate)=6;
出力結果
+----+----------+-----------+ | Id | UserName | UserLikes | +----+----------+-----------+ | 2 | Sam | 790 | +----+----------+-----------+ 1 row in set (0.00 sec)
実行結果を見ると、6月28日に投稿されたSamのレコードだけが抽出されていることがわかります。
補足:MONTH()関数のポイント
MONTH(日付カラム)は、1〜12の整数値として月を返します。- 年をまたいで同じ月のデータをまとめて取得できるため、「毎年6月のデータ」のような集計にも便利です。
- 特定の年と月の両方で絞り込みたい場合は、
YEAR()関数と組み合わせてWHERE YEAR(カラム)=2019 AND MONTH(カラム)=6のように指定します。
このように、MONTH()関数を活用すれば、datetime型やdate型のカラムから柔軟に月単位のデータ抽出が可能になります。ログ分析や月別レポート作成など、さまざまな場面で役立つテクニックなので、ぜひ覚えておきましょう。
-
【MySQL】別のテーブルのデータを参照してテーブルを更新する方法(UPDATE+JOIN)
MySQLでは、UPDATEコマンドとJOINを組み合わせることで、別のテーブルのデータを参照しながら、対象のテーブルを効率的に更新できます。本記事では、2つのテーブルを使った具体的なサンプルを通じて、その手順をわかりやすく解説します。 手順1:参照元のテーブルを作成する まず、氏名データを保持する1つ目のテーブル「demo54」を作成します。 mysql> create table demo54-> (-> firstName varchar(20),-> lastName varchar(20)-> );Query OK, 0 rows affected (
-
MySQLであるテーブルから別のテーブルへデータを挿入する方法(INSERT INTO SELECT)
MySQLであるテーブルから別のテーブルへデータをコピーして挿入したい場合は、INSERT INTO ... SELECT 文を使用します。この記事では、実際にテーブルを作成し、データを別テーブルへ移す手順をサンプルコードと実行結果とともにわかりやすく解説します。 1. 元となるテーブルを作成する まず、コピー元となるテーブル「DemoTable1」を作成します。カラムは Id(int型)と FirstName(varchar型)の2つです。 mysql> create table DemoTable1 -> ( -> Id int, -> Fi