MySQLで特定の年のレコードを取得する方法|YEAR()関数の使い方を実例で解説
MySQLで年ごとにレコードを取得する基本構文
MySQLで特定の年に該当するレコードだけを取り出したい場合は、YEAR()関数を使用します。YEAR()関数は、DATE型やDATETIME型の値から「年」の部分を数値として返す関数で、WHERE句と組み合わせることで簡単に年単位の絞り込みができます。
SELECT * FROM テーブル名
WHERE YEAR(カラム名) = 取得したい年;
サンプルテーブルの作成
まずは動作確認用のテーブルを作成しましょう。ここでは、顧客名と出荷日を持つテーブルを例にします。
mysql> CREATE TABLE DemoTable
-> (
-> CustomerName varchar(100),
-> ShippingDate datetime
-> );
Query OK, 0 rows affected (0.64 sec)
テストデータの挿入
INSERT文を使って、いくつかのレコードを登録します。
mysql> INSERT INTO DemoTable VALUES('Chris','2019-01-21');
Query OK, 1 row affected (0.28 sec)
mysql> INSERT INTO DemoTable VALUES('Robert','2018-02-21');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable VALUES('David','2016-04-01');
Query OK, 1 row affected (0.17 sec)登録データの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> SELECT * FROM DemoTable;
実行結果は以下のとおりです。
+--------------+---------------------+
| CustomerName | ShippingDate |
+--------------+---------------------+
| Chris | 2019-01-21 00:00:00 |
| Robert | 2018-02-21 00:00:00 |
| David | 2016-04-01 00:00:00 |
+--------------+---------------------+
3 rows in set (0.00 sec)
特定の年のレコードを抽出するクエリ
ここでは、2016年のレコードのみを取得する例を紹介します。WHERE句の中でYEAR()関数を使い、ShippingDateカラムの年が2016である行だけを絞り込みます。
mysql> SELECT * FROM DemoTable
-> WHERE YEAR(ShippingDate)=2016;
実行結果:
+--------------+---------------------+
| CustomerName | ShippingDate |
+--------------+---------------------+
| David | 2016-04-01 00:00:00 |
+--------------+---------------------+
1 row in set (0.04 sec)
パフォーマンスに関する補足
YEAR()関数は非常に便利ですが、WHERE句内でカラムに関数を適用するとインデックスが利用されず、全件スキャンになる可能性がある点に注意が必要です。大量のデータを扱うテーブルでは、以下のように範囲条件へ書き換えることでインデックスを活かせます。
SELECT * FROM DemoTable
WHERE ShippingDate >= '2016-01-01'
AND ShippingDate < '2017-01-01';
この書き方であれば、ShippingDateカラムにインデックスが張られている場合でも高速な範囲検索が可能になります。小規模なテーブルではYEAR()関数、大規模なテーブルでは範囲条件、というように使い分けるのがおすすめです。
-
MySQLでAND・OR演算子を組み合わせた単一クエリを使って特定のレコードを取得する方法
MySQLでは、AND演算子とOR演算子をWHERE句で組み合わせることで、複数の条件を指定しながら特定のレコードを1つのクエリで取得できます。本記事では、実際にテーブルを作成し、データを挿入して、AND・ORを組み合わせたクエリの動作を確認していきます。 1. テーブルの作成 まず、CREATE TABLE文でサンプル用のテーブルを作成します。 mysql> create table DemoTable2015 -> ( -> StudentId int, -> StudentName varchar(20), -> Stude
-
MySQLで最大の累積値とその出現回数を取得するクエリの書き方
カラム同士を掛け合わせた値(累積値)の中から最大値と、その出現回数を取得したい場合は、集計関数 COUNT(*) をサブクエリと組み合わせて使用します。あわせて GROUP BY 句も活用します。テーブルの作成まず、以下のコマンドでテーブルを作成しましょう。mysql> create table demo23-> (-> id int not null auto_increment primary key,-> value1 int,-> value2 int-> );Query OK, 0 rows affected (1.65 sec)レコードの挿入続い