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

MySQLで年と月を指定してデータを抽出する方法(YEAR()・MONTH()関数の使い方)

MySQLで特定のに基づいてデータを抽出したい場合、組み込み関数であるYEAR()MONTH()を使用します。これらの関数をWHERE句と組み合わせることで、日付型カラムから年や月の値を取り出し、目的のレコードだけを効率的に絞り込むことができます。

基本構文

年と月を指定してデータを取得する際の基本的な構文は以下の通りです。

select *from yourTableName where YEAR(yourColumnName) = YearValue AND MONTH(yourColumnName) = monthValue;

サンプルテーブルの作成

それでは、実際に動きを確認するためのテーブルを作成しましょう。テーブル作成のクエリは以下の通りです。

mysql> create table selectDataOnYearandMonthDemo
-> (
-> BookId int,
-> BookName varchar(100),
-> BookDueDate datetime
-> );
Query OK, 0 rows affected (0.57 sec)

BookId(書籍ID)、BookName(書籍名)、BookDueDate(返却予定日)を持つシンプルなテーブルを用意しました。

テストデータの挿入

次に、テーブルにいくつかのレコードを挿入します。挿入用のクエリは以下の通りです。

mysql> insert into selectDataOnYearandMonthDemo values(101,'C in Depth',date_add(now(),interval -1 year));
Query OK, 1 row affected (0.50 sec)

mysql> insert into selectDataOnYearandMonthDemo values(102,'Let us C',date_add(curdate(),interval 1 year));
Query OK, 1 row affected (0.12 sec)

mysql> insert into selectDataOnYearandMonthDemo values(103,'SCJP Java','2018-12-5');
Query OK, 1 row affected (0.12 sec)

mysql> insert into selectDataOnYearandMonthDemo values(104,'Introduction to C++','2016-4-5');
Query OK, 1 row affected (0.24 sec)

ここでは、date_add()関数を使って現在の日付から1年前・1年後の日付を生成したレコードと、直接日付文字列を指定したレコードを混在させて登録しています。

登録データの確認

挿入したすべてのレコードを表示して、データの中身を確認しておきましょう。

mysql> select *from selectDataOnYearandMonthDemo;

実行結果は以下の通りです。

+--------+--------------------+---------------------+
| BookId | BookName | BookDueDate |
+--------+--------------------+---------------------+
| 101 | C in Depth | 2017-12-05 21:44:20 |
| 102 | Let us C | 2019-12-05 00:00:00 |
| 103 | SCJP Java | 2018-12-05 00:00:00 |
| 104 | Introduction to C++| 2016-04-05 00:00:00 |
+--------+--------------------+---------------------+
4 rows in set (0.00 sec)

年と月を指定した抽出クエリの実行

準備ができたので、いよいよYEAR()MONTH()を使って「2019年12月」のデータを抽出してみましょう。クエリは以下の通りです。

mysql> select *from selectDataOnYearandMonthDemo where YEAR(BookDueDate) = 2019 AND MONTH(BookDueDate) = 12;

実行結果は以下の通りです。

+--------+----------+---------------------+
| BookId | BookName | BookDueDate |
+--------+----------+---------------------+
| 102 | Let us C | 2019-12-05 00:00:00 |
+--------+----------+---------------------+
1 row in set (0.05 sec)

このように、BookDueDateが「2019年12月」に該当するレコードのみが正しく抽出されました。

まとめと補足

YEAR()関数とMONTH()関数をWHERE句で組み合わせることで、特定の年・月に一致するレコードを簡単に取得できます。書類の締め切り管理や月次レポートの集計など、日常的な業務でも頻繁に使われるテクニックです。

なお、注意点として、カラムに関数を適用するとインデックスが利用されず、大量データの場合は検索が遅くなる可能性があります。パフォーマンスが重視される場面では、「BookDueDate >= '2019-12-01' AND BookDueDate < '2020-01-01'」のような範囲指定による検索も併せて検討すると良いでしょう。

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

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

  2. MySQLでタイムスタンプ列に基づいてデータを選択し、真偽値を設定する方法

    MySQLでタイムスタンプ列に基づいてデータを選択し、真偽値を設定する方法 MySQLではIF()関数を使うことで、タイムスタンプ列の値に基づいてデータを選択し、結果を真偽値(1または0)として取得できます。この記事では、実際のサンプルコードを交えながら手順を詳しく解説します。 まず、現在の日付を確認しておきましょう。 mysql> select curdate(); +------------+ | curdate() | +------------+ | 2019-12-10 | +------------+ 1 row in set (0.00 sec) テーブルの作成 はじめに