MySQLで特定の月と年に基づいてレコードを取得する方法
MySQLで特定の月と年に基づいてレコードを取得する方法
日付データから特定の月と年に該当するレコードだけを抽出したい場合、MySQLの MONTH() 関数と YEAR() 関数を組み合わせて使用します。ここでは、実際にテーブルを作成し、データを挿入して、条件に合うレコードを取得するまでの手順を具体的に解説します。
1. サンプルテーブルの作成
まず、日付型(DATE)のカラムを持つテーブルを作成します。
mysql> create table DemoTable1846 ( PurchaseDate date ); Query OK, 0 rows affected (0.00 sec)
2. レコードの挿入
INSERT文を使って、異なる年月の日付データを複数件登録します。
mysql> insert into DemoTable1846 values('2019-01-10');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1846 values('2019-12-24');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1846 values('2018-09-21');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1846 values('2017-10-26');
Query OK, 1 row affected (0.00 sec)3. 登録データの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable1846;
実行結果は以下の通りです。
+--------------+ | PurchaseDate | +--------------+ | 2019-01-10 | | 2019-12-24 | | 2018-09-21 | | 2017-10-26 | +--------------+ 4 rows in set (0.00 sec)
4. 特定の月と年でレコードを抽出する
ここが本題です。WHERE句の中で MONTH() 関数と YEAR() 関数を使い、「月が12かつ年が2019」という条件を指定します。
mysql> select * from DemoTable1846 where month(PurchaseDate)=12 and year(PurchaseDate)=2019;
実行すると、条件に一致したレコードのみが返されます。
+--------------+ | PurchaseDate | +--------------+ | 2019-12-24 | +--------------+ 1 row in set (0.00 sec)
補足:パフォーマンスに関する注意点
MONTH() や YEAR() をWHERE句で使用すると、インデックスがあってもフルスキャンになる可能性があります。大量のデータを扱う場合は、範囲指定(例:PurchaseDate >= '2019-12-01' AND PurchaseDate < '2020-01-01')に書き換えることで、インデックスを活用した高速な検索が可能になります。用途に応じて使い分けるとよいでしょう。
-
MySQLのREGEXPを使って数字とドットを含むレコードを取得する方法
MySQLでは、REGEXP演算子を使用することで、正規表現にマッチするレコードを簡単に抽出できます。本記事では、「数字とドット(.)」で構成されたバージョン文字列のみを取得する方法を、具体的なサンプルコードとともに解説します。サンプルテーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable -> ( -> Version varchar(20) -> );Query OK, 0 rows affected (0.77 sec)レコードの挿入次に、INSERTコマンドを使用して、テーブルにいくつかのレコー
-
MySQLで特定の年の開始日と終了日を取得する方法
MySQLで特定の年に該当するレコードの開始日(StartDate)と終了日(EndDate)を抽出するには、YEAR()関数を使用します。この関数は日付から「年」の部分だけを取り出すことができるため、年の条件での絞り込みに便利です。ここでは、実際にテーブルを作成し、サンプルデータを登録して、特定の年でレコードを検索する手順を順番に解説します。1. サンプルテーブルを作成するまず、開始日と終了日を格納するためのテーブルを作成します。mysql> create table DemoTable1843 ( StartDate date, EndDate date