MySQLクエリでタイムスタンプの一部を抽出する方法|YEAR()関数の使い方を解説
MySQLでタイムスタンプの一部を選択するには?
MySQLのクエリでタイムスタンプから特定の部分(年・月・日など)だけを取り出したい場合は、YEAR() 関数を使用します。YEAR()関数は、TIMESTAMP型やDATETIME型のカラムから「年」の部分のみを抽出してくれる便利な関数です。
基本構文
SELECT YEAR(タイムスタンプカラム名) AS 別名 FROM テーブル名;
実際に試してみよう:サンプルテーブルの作成
それでは、上記の構文を理解するために、実際にテーブルを作成してみましょう。以下がテーブル作成用のクエリです。
mysql> CREATE TABLE SelectPartOfTimestampDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> ShippingTime TIMESTAMP
-> );
Query OK, 0 rows affected (1.11 sec)このテーブルは、出荷時刻(ShippingTime)を記録するシンプルな構造になっています。
レコードの挿入
次に、INSERTコマンドを使っていくつかのレコードを挿入します。ここでは NOW() 関数と DATE_ADD() 関数を組み合わせて、現在の日時や過去・未来の日時を登録しています。
mysql> INSERT INTO SelectPartOfTimestampDemo(ShippingTime) VALUES(NOW()); Query OK, 1 row affected (0.20 sec) mysql> INSERT INTO SelectPartOfTimestampDemo(ShippingTime) VALUES(DATE_ADD(NOW(), INTERVAL -2 YEAR)); Query OK, 1 row affected (0.17 sec) mysql> INSERT INTO SelectPartOfTimestampDemo(ShippingTime) VALUES(DATE_ADD(NOW(), INTERVAL -3 YEAR)); Query OK, 1 row affected (0.18 sec) mysql> INSERT INTO SelectPartOfTimestampDemo(ShippingTime) VALUES(DATE_ADD(NOW(), INTERVAL -1 YEAR)); Query OK, 1 row affected (0.18 sec) mysql> INSERT INTO SelectPartOfTimestampDemo(ShippingTime) VALUES(DATE_ADD(NOW(), INTERVAL 1 YEAR)); Query OK, 1 row affected (0.16 sec) mysql> INSERT INTO SelectPartOfTimestampDemo(ShippingTime) VALUES(DATE_ADD(NOW(), INTERVAL 2 YEAR)); Query OK, 1 row affected (0.48 sec) mysql> INSERT INTO SelectPartOfTimestampDemo(ShippingTime) VALUES(DATE_ADD(NOW(), INTERVAL 3 YEAR)); Query OK, 1 row affected (0.10 sec)
登録データの確認
SELECT文ですべてのレコードを表示して確認しましょう。
mysql> SELECT * FROM SelectPartOfTimestampDemo;
実行結果は以下のとおりです。
+----+---------------------+ | Id | ShippingTime | +----+---------------------+ | 1 | 2019-02-08 15:03:27 | | 2 | 2017-02-08 15:03:50 | | 3 | 2016-02-08 15:04:03 | | 4 | 2018-02-08 15:04:06 | | 5 | 2020-02-08 15:04:10 | | 6 | 2021-02-08 15:04:24 | | 7 | 2022-02-08 15:04:30 | +----+---------------------+ 7 rows in set (0.00 sec)
YEAR()関数でタイムスタンプの「年」を抽出する
ここからが本題です。YEAR()関数を使って、タイムスタンプから「年」の部分だけを選択するクエリは以下のとおりです。
mysql> SELECT YEAR(ShippingTime) AS PartOfTimeStamp FROM SelectPartOfTimestampDemo;
実行すると、次のような出力が得られます。
+-----------------+ | PartOfTimeStamp | +-----------------+ | 2019 | | 2017 | | 2016 | | 2018 | | 2020 | | 2021 | | 2022 | +-----------------+ 7 rows in set (0.00 sec)
このように、TIMESTAMP型のカラムから年だけを簡単に取り出すことができます。
応用:月や日も抽出できる
YEAR()関数と同じ要領で、他の関数を使えば月や日なども抽出できます。
- MONTH() … 月を抽出
- DAY() … 日を抽出
- HOUR() / MINUTE() / SECOND() … 時・分・秒を抽出
例えば、月を抽出したい場合は以下のように記述します。
mysql> SELECT MONTH(ShippingTime) AS PartOfTimeStamp FROM SelectPartOfTimestampDemo;
用途に合わせてこれらの関数を使い分けることで、日付データの集計や絞り込みが格段に効率化されます。GROUP BY句と組み合わせれば、「年度ごとの売上集計」などの処理にも活用できるので、ぜひ覚えておきましょう。
-
MySQLで0を末尾に回して並べ替える!条件付きSELECTとORDER BYの使い方
MySQLでは、ORDER BY句に「カラム名=0」という条件式を組み合わせることで、0以外の値を昇順に並べたうえで、0のレコードだけを末尾にまとめて表示できます。この記事では、その具体的な書き方と実行例を分かりやすく解説します。基本構文select * from yourTableName order by yourColumnName=0, yourColumnName;この構文のポイントは、yourColumnName=0 がブール値として評価される点です。値が0であれば「1(真)」、0以外であれば「0(偽)」となるため、昇順ソートでは0以外の値の行が先に並び、その後ろに0の行が配置され
-
MySQLで月を指定してデータを抽出する方法(MONTH()関数の使い方)
MySQLで日付データから特定の「月」に該当するレコードだけを抽出したい場合は、MONTH()関数を使うのが便利です。この記事では、実際にテーブルを作成し、サンプルデータを挿入しながら、月を条件にしたSELECT文の書き方を具体的に解説します。1. サンプルテーブルの作成まずは、出荷日(Shippingdate)を格納するdatetime型のカラムを持つテーブルを作成します。mysql> create table DemoTable1599 -> ( -> Shippingdate d