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

MySQLで特定の月と年を指定してレコードを検索する方法(MONTH()・YEAR()関数の使い方)

MySQLで月と年を指定してデータを検索するには?

DATETIME型のカラムから「2015年7月」のように特定の月・年に該当するレコードを抽出したい場合は、MySQLのMONTH()関数とYEAR()関数を組み合わせるのが最も簡単な方法です。

ここでは、日時が「2015-07-01 11:15:30」の形式で保存されたデータを対象に、具体的な手順をサンプルコード付きで解説します。

1. サンプルテーブルの作成

まず、検索対象となるテーブルを作成します。

mysql> create table DemoTable
   (
   Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   ShippingDate datetime
   );
Query OK, 0 rows affected (0.54 sec)

2. テストデータの挿入

INSERTコマンドを使って、いくつかのレコードを登録します。

mysql> insert into DemoTable(ShippingDate) values('2019-01-21 10:40:21');
Query OK, 1 row affected (0.20 sec)

mysql> insert into DemoTable(ShippingDate) values('2015-07-01 11:15:30');
Query OK, 1 row affected (0.12 sec)

mysql> insert into DemoTable(ShippingDate) values('2012-12-31 10:45:56');
Query OK, 1 row affected (0.14 sec)

3. 登録データの確認

SELECT文でテーブル内の全レコードを表示してみましょう。

mysql> select *from DemoTable;

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

+----+---------------------+
| Id | ShippingDate        |
+----+---------------------+
|  1 | 2019-01-21 10:40:21 |
|  2 | 2015-07-01 11:15:30 |
|  3 | 2012-12-31 10:45:56 |
+----+---------------------+
3 rows in set (0.00 sec)

4. MONTH()とYEAR()を使った検索クエリ

月と年を指定してレコードを検索するには、WHERE句の中でMONTH()関数とYEAR()関数を使用します。以下は「2015年7月」のデータを抽出するクエリです。

mysql> select *from DemoTable where MONTH(ShippingDate)=7 and YEAR(ShippingDate)=2015;

実行結果:

+----+---------------------+
| Id | ShippingDate        |
+----+---------------------+
|  2 | 2015-07-01 11:15:30 |
+----+---------------------+
1 row in set (0.03 sec)

このように、MONTH()関数は日付から「月」を、YEAR()関数は「年」を数値として返すため、両方の条件をANDで組み合わせることで、目的の年月に一致するレコードだけを正確に取得できます。

補足:大量データを扱う場合の注意点

カラムに関数を適用するとインデックスが利用されにくくなるため、レコード数が非常に多いテーブルではパフォーマンスが低下する可能性があります。そのような場合は、以下のように日付の範囲指定(BETWEENや以上・未満の比較)を使う方法も検討するとよいでしょう。

mysql> select *from DemoTable
    -> where ShippingDate >= '2015-07-01 00:00:00'
    ->   and ShippingDate <  '2015-08-01 00:00:00';

用途やデータ量に応じて、MONTH()/YEAR()を使った直感的な方法と、範囲検索による高速な方法を使い分けるのがおすすめです。

  1. MySQLで複数テーブルの結果をマージする方法|JOINを使った結合手順を解説

    MySQLで2つ以上のテーブルに分かれたデータを1つの結果としてまとめたい場合、JOIN(結合)を使うのが最もシンプルで効果的な方法です。この記事では、実際にテーブルを作成しながら、JOINによる結果のマージ手順をわかりやすく解説します。マージに使用するJOINの基本構文結果をマージするには、以下のような構文でシンプルなJOINを使用します。SELECT aliasName1.yourColumnName1, aliasName1.yourColumnName2, ... aliasName2.yourColumnName1 FROM yourTableName1 aliasN

  2. C#の「M」「m」標準書式指定子の使い方を解説

    C#における月(Month)標準書式指定子は、日付と時刻をカスタム書式文字列に変換するための指定子です。この書式指定子を使用すると、現在のカルチャに基づいた「月と日」の形式で日付を出力できます。実際に適用されるカスタム書式文字列は、DateTimeFormatInfoクラスのMonthDayPatternプロパティによって定義されています。たとえば、英語(米国)カルチャの場合、対応するカスタム書式文字列は以下のようになります。MMMM ddサンプルコード次のコードでは、「m」書式指定子を使って、2018年6月11日の日付を英語(米国)カルチャで出力しています。using System; usi