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

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型のカラムから柔軟に月単位のデータ抽出が可能になります。ログ分析や月別レポート作成など、さまざまな場面で役立つテクニックなので、ぜひ覚えておきましょう。

  1. 【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 (

  2. MySQLであるテーブルから別のテーブルへデータを挿入する方法(INSERT INTO SELECT)

    MySQLであるテーブルから別のテーブルへデータをコピーして挿入したい場合は、INSERT INTO ... SELECT 文を使用します。この記事では、実際にテーブルを作成し、データを別テーブルへ移す手順をサンプルコードと実行結果とともにわかりやすく解説します。 1. 元となるテーブルを作成する まず、コピー元となるテーブル「DemoTable1」を作成します。カラムは Id(int型)と FirstName(varchar型)の2つです。 mysql> create table DemoTable1 -> ( -> Id int, -> Fi