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

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()関数を組み合わせるのが最もシンプルで直感的な方法です。小規模なデータであれば十分実用的ですが、大規模なテーブルを扱う場合は、範囲条件による検索の方が高速になる点も覚えておきましょう。

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

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

  2. MySQLでAND・OR演算子を組み合わせた単一クエリを使って特定のレコードを取得する方法

    MySQLでは、AND演算子とOR演算子をWHERE句で組み合わせることで、複数の条件を指定しながら特定のレコードを1つのクエリで取得できます。本記事では、実際にテーブルを作成し、データを挿入して、AND・ORを組み合わせたクエリの動作を確認していきます。 1. テーブルの作成 まず、CREATE TABLE文でサンプル用のテーブルを作成します。 mysql> create table DemoTable2015 -> ( -> StudentId int, -> StudentName varchar(20), -> Stude