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

MySQLでタイムスタンプから特定の年のレコードを抽出する方法

MySQLでは、YEAR()関数を使うことで、タイムスタンプ(timestamp)型のカラムから年だけを取り出し、特定の年のレコードを簡単に抽出できます。

基本構文

YEAR()関数を使用した基本的な構文は以下のとおりです。

SELECT yourColumnName FROM yourTableName WHERE YEAR(yourTimestampColumnName) = 'yourYearValue';

サンプルテーブルの作成

それでは、実際に動作を確認するためにテーブルを作成してみましょう。テーブル作成用のクエリは次のとおりです。

mysql> create table getYearOut
    -> (
    -> Id int NOT NULL AUTO_INCREMENT,
    -> Name varchar(10),
    -> yourTimestamp timestamp default current_timestamp,
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (1.56 sec)

このテーブルには、Id、Name、yourTimestamp の3つのカラムがあります。yourTimestamp カラムにはデフォルト値として current_timestamp が設定されているため、INSERT時に時刻を指定しない場合は現在の日時が自動的に登録されます。

レコードの挿入

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

mysql> insert into getYearOut(Name,yourTimestamp) values('John',now());
Query OK, 1 row affected (0.26 sec)
mysql> insert into getYearOut(Name,yourTimestamp) values('Carol','2018-09-23 17:34:44');
Query OK, 1 row affected (0.38 sec)
mysql> insert into getYearOut(Name,yourTimestamp) values('Bob','2016-05-12 16:12:34');
Query OK, 1 row affected (0.43 sec)

全レコードの確認

SELECT文ですべてのレコードを表示して、データが正しく登録されたか確認しましょう。

mysql> select *from getYearOut;

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

+----+-------+---------------------+
| Id | Name  | yourTimestamp       |
+----+-------+---------------------+
|  1 | John  | 2019-02-05 11:46:11 |
|  2 | Carol | 2018-09-23 17:34:44 |
|  3 | Bob   | 2016-05-12 16:12:34 |
+----+-------+---------------------+
3 rows in set (0.00 sec)

特定の年のレコードを取得するクエリ

ここからが本題です。YEAR()関数を使って、タイムスタンプから年を取り出し、特定の年に一致するレコードのみを取得します。たとえば「2019年」のレコードを取得する場合は、次のようなクエリを実行します。

mysql> select Id, Name from getYearOut where year(yourTimestamp)='2019';

実行すると、2019年のレコードだけが出力されます。

+----+-------+
| Id | Name  |
+----+-------+
| 1  | John  +
1 row in set (0.00 sec)

補足:パフォーマンスに関する注意点

YEAR()関数は非常に便利ですが、WHERE句内でカラムに関数を適用するとインデックスが利用されにくくなる場合があります。大量のデータを扱う場合は、範囲指定による検討もおすすめです。例えば2019年のレコードを取得するなら、以下のように書くこともできます。

SELECT Id, Name FROM getYearOut
WHERE yourTimestamp >= '2019-01-01 00:00:00'
  AND yourTimestamp < '2020-01-01 00:00:00';

この書き方であれば、yourTimestampカラムにインデックスが張られていれば、そのインデックスを活用した高速な検索が可能になります。用途やデータ量に応じて、YEAR()関数と範囲指定を使い分けるとよいでしょう。

  1. MySQLのSELECT文で特定のカラム(列)のレコードを取得する方法

    はじめにMySQLでSELECTクエリを実行する際、SELECT *を使うとすべてのカラムが取得されますが、カラム名を明示的に指定すれば、必要なカラム(列)のデータだけを効率的に取り出せます。この記事では、サンプルテーブルを作成しながら、特定のカラムのレコードを取得する手順を解説します。1. テーブルの作成まず、CREATE TABLE文でサンプル用のテーブルを作成しましょう。mysql> create table DemoTable1837    (    StudentId int NOT NULL AU

  2. MySQLでテーブルから特定の行を抽出するクエリの書き方

    MySQLでは、WHERE句とORDER BY、LIMITを組み合わせることで、テーブルから条件に合致する特定の行だけを効率的に取得できます。本記事では、実際にサンプルテーブルを作成し、特定の行を抽出するクエリの実行手順をわかりやすく解説します。 1. サンプルテーブルの作成 まず、CREATE TABLE文を使ってサンプル用のテーブルを作成します。ここでは「Section(組)」と「StudentName(生徒名)」という2つのカラムを持つテーブルを用意しました。 mysql> create table DemoTable1972 ( Section char(1),