MySQLで年と月を指定して日付データを取得する方法|YEAR()・MONTH()関数の使い方
はじめに
MySQLで特定の「年」と「月」に一致する日付データを取得したい場合には、YEAR()関数とMONTH()関数を組み合わせるのが便利です。この記事では、実際にテーブルを作成し、サンプルデータを挿入しながら、年月を指定したデータ抽出の手順をわかりやすく解説します。
1. サンプルテーブルを作成する
まずは出荷日(ShippingDate)を格納するためのテーブルを作成しましょう。
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
ShippingDate datetime
);
Query OK, 0 rows affected (0.48 sec)
2. テストデータを挿入する
INSERT文を使って、いくつかの日付レコードを登録します。
mysql> insert into DemoTable(ShippingDate) values('2019-01-31');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(ShippingDate) values('2018-12-01');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable(ShippingDate) values('2019-06-02');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable(ShippingDate) values('2019-11-18');
Query OK, 1 row affected (0.10 sec)3. 登録されたレコードを確認する
SELECT文で全件を表示して、データが正しく登録されているか確認します。
mysql> select *from DemoTable;
実行結果:
+----+-----------------------+
| Id | ShippingDate |
+----+-----------------------+
| 1 | 2019-01-31 00 :00 :00 |
| 2 | 2018-12-01 00 :00 :00 |
| 3 | 2019-06-02 00 :00 :00 |
| 4 | 2019-11-18 00 :00 :00 |
+----+-----------------------+
4 rows in set (0.00 sec)
4. 年と月を指定してデータを取得する
ここが本題です。WHERE句の中でYEAR()関数とMONTH()関数を使うことで、「2019年6月」のように特定の年月に該当するレコードだけを絞り込むことができます。
mysql> select *from DemoTable where (year(ShippingDate)='2019') and (month(ShippingDate)='06');
実行結果:
+----+-----------------------+
| Id | ShippingDate |
+----+-----------------------+
| 3 | 2019-06-02 00 :00 :00 |
+----+-----------------------+
1 row in set (0.07 sec)
このように、Id=3の「2019-06-02」だけが正しく抽出されました。
補足:大量データには範囲指定検索がおすすめ
YEAR()やMONTH()を列に直接適用すると、インデックスが利用されにくくなり、レコード数が多いテーブルではパフォーマンスが低下する可能性があります。そのようなケースでは、次のように日付の範囲で条件を指定すると、インデックスが有効に働き高速に検索できます。
mysql> select * from DemoTable
where ShippingDate >= '2019-06-01'
and ShippingDate < '2019-07-01';
また、DATE_FORMAT()関数を使って「YYYY-MM」形式に整形して比較する方法もあります。
mysql> select * from DemoTable
where date_format(ShippingDate, '%Y-%m') = '2019-06';
まとめ
MySQLで年と月を指定して日付データを取得するには、WHERE句でYEAR()関数とMONTH()関数を組み合わせるのが最もシンプルで直感的な方法です。小規模なデータであれば十分実用的ですが、大規模なテーブルを扱う場合は、範囲条件による検索の方が高速になる点も覚えておきましょう。
-
MySQLで特定の月と年に基づいてレコードを取得する方法
MySQLで特定の月と年に基づいてレコードを取得する方法日付データから特定の月と年に該当するレコードだけを抽出したい場合、MySQLの MONTH() 関数と YEAR() 関数を組み合わせて使用します。ここでは、実際にテーブルを作成し、データを挿入して、条件に合うレコードを取得するまでの手順を具体的に解説します。1. サンプルテーブルの作成まず、日付型(DATE)のカラムを持つテーブルを作成します。mysql> create table DemoTable1846 ( PurchaseDat
-
MySQLでAND・OR演算子を組み合わせた単一クエリを使って特定のレコードを取得する方法
MySQLでは、AND演算子とOR演算子をWHERE句で組み合わせることで、複数の条件を指定しながら特定のレコードを1つのクエリで取得できます。本記事では、実際にテーブルを作成し、データを挿入して、AND・ORを組み合わせたクエリの動作を確認していきます。 1. テーブルの作成 まず、CREATE TABLE文でサンプル用のテーブルを作成します。 mysql> create table DemoTable2015 -> ( -> StudentId int, -> StudentName varchar(20), -> Stude