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

【MySQL】日付の年だけを一括変更する方法をわかりやすく解説

MySQLで日付(DATE型)データの「年」の部分だけを変更したい場合は、DATE_FORMAT()関数UPDATE文を組み合わせることで簡単に実現できます。月や日はそのまま維持しながら、年のみを一括で更新できる便利なテクニックです。本記事では、実際のサンプルコードとともに手順を詳しく解説します。

基本構文

日付の年を変更するための基本的な構文は以下の通りです。

UPDATE yourTableName
SET yourDateColumnName = DATE_FORMAT(yourDateColumnName ,'yourYearValue-%m-%d');

DATE_FORMAT()の第2引数に「新しい年-%m-%d」という形式を指定することで、月(%m)と日(%d)は元の値を引き継ぎ、年だけを任意の値に置き換えられます。

サンプルテーブルの作成

それでは、実際に動作を確認していきましょう。まずはテーブルを作成します。

mysql> create table ChangeYear
    -> (
    -> id int not null auto_increment,
    -> ArrivalTime date,
    -> PRIMARY KEY(id)
    -> );
Query OK, 0 rows affected (0.83 sec)

このテーブルは、自動採番される「id」と、日付型の「ArrivalTime」カラムで構成されています。

テストデータの挿入

次に、INSERT文を使って複数のレコードを挿入します。

mysql> insert into ChangeYear(ArrivalTime) values(date_add(now(),interval -2 year));
Query OK, 1 row affected, 1 warning (0.20 sec)

mysql> insert into ChangeYear(ArrivalTime) values('2012-10-24');
Query OK, 1 row affected (0.18 sec)

mysql> insert into ChangeYear(ArrivalTime) values('2016-3-21');
Query OK, 1 row affected (0.19 sec)

mysql> insert into ChangeYear(ArrivalTime) values('2015-4-24');
Query OK, 1 row affected (0.20 sec)

mysql> insert into ChangeYear(ArrivalTime) values(curdate());
Query OK, 1 row affected (0.20 sec)

ここでは、NOW()から2年前の日付を算出するdate_add()、文字列として直接指定した日付、そしてCURDATE()(現在の日付)など、さまざまな方法でデータを登録しています。

登録済みデータの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from ChangeYear;

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

+----+-------------+
| id | ArrivalTime |
+----+-------------+
| 1 | 2017-01-07 |
| 2 | 2012-10-24 |
| 3 | 2016-03-21 |
| 4 | 2015-04-24 |
| 5 | 2019-01-07 |
+----+-------------+
5 rows in set (0.00 sec)

年のみを更新するUPDATE文

それでは、日付カラムの「年」だけを変更するクエリを実行します。この例では、すべてのレコードの年を「2019」に変更します。

mysql> update ChangeYear
    -> set ArrivalTime = DATE_FORMAT(ArrivalTime,'2019-%m-%d');
Query OK, 4 rows affected (0.12 sec)
Rows matched − 5 Changed − 4 Warnings − 0

実行結果を見ると、「Rows matched:5 / Changed:4」と表示されています。これは、すでに年が2019だったレコード(id=5)は値が変わらなかったため、実際に更新されたのは4件ということを意味しています。

更新結果の確認

もう一度SELECT文を実行して、更新後のデータを確認しましょう。

mysql> select *from ChangeYear;

実行結果を見ると、すべてのレコードの年が「2019」に変更され、月と日は元の値がそのまま維持されていることがわかります。

+----+-------------+
| id | ArrivalTime |
+----+-------------+
|  1 | 2019-01-07  |
|  2 | 2019-10-24  |
|  3 | 2019-03-21  |
|  4 | 2019-04-24  |
|  5 | 2019-01-07  |
+----+-------------+
5 rows in set (0.00 sec)

まとめ

MySQLで日付の年だけを変更するには、DATE_FORMAT()関数で「新しい年-%m-%d」の形式に整形し、UPDATE文で代入します。すべてのレコードではなく、特定の行だけを対象にしたい場合は、WHERE句を追加すれば対応可能です。

update ChangeYear
set ArrivalTime = DATE_FORMAT(ArrivalTime,'2020-%m-%d')
where id = 2;

大量の日付データを扱う際や、年度の付け替えなどのメンテナンス作業で役立つテクニックなので、ぜひ覚えておきましょう。

  1. MySQLで日付付きの行を挿入する方法:DATE型カラムへのデータ登録手順

    MySQLで日付付きの行を挿入するには MySQLでは、DATE型のカラムに対して「YYYY-MM-DD」形式の日付文字列を指定することで、簡単に日付付きの行を挿入できます。ここでは、従業員情報を管理するテーブルを例に、テーブル作成からデータ挿入、確認までの一連の手順を解説します。 1. テーブルを作成する まず、CREATE TABLE文を使ってサンプル用のテーブルを作成します。EmployeeIdは自動採番(AUTO_INCREMENT)の主キーとし、入社日を格納するJoiningDateカラムにはDATE型を指定します。 mysql> create table DemoTable

  2. MySQLで当日の00:00から現在時刻までのレコードを抽出するクエリの書き方

    はじめにMySQLで「今日の日付の午前0時(00:00)から現在時刻まで」のレコードを取得したいケースはよくあります。例えば、現在の日時が 2019-09-14 08:50:10 である場合、2019-09-14 00:00:00 から 2019-09-14 08:50:10 までの範囲にあるレコードを抽出することになります。本記事では、実際にテーブルを作成し、データを挿入しながら、この条件を実現するクエリを具体的に解説します。サンプルテーブルの作成まず、DATETIME型のカラムを持つテーブルを作成します。mysql> create table DemoTable( &nbs