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

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句と組み合わせれば、「年度ごとの売上集計」などの処理にも活用できるので、ぜひ覚えておきましょう。

  1. 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の行が配置され

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

    MySQLで日付データから特定の「月」に該当するレコードだけを抽出したい場合は、MONTH()関数を使うのが便利です。この記事では、実際にテーブルを作成し、サンプルデータを挿入しながら、月を条件にしたSELECT文の書き方を具体的に解説します。1. サンプルテーブルの作成まずは、出荷日(Shippingdate)を格納するdatetime型のカラムを持つテーブルを作成します。mysql> create table DemoTable1599    -> (    -> Shippingdate d