MySQLで日付の年だけを2020年から2011年に変更する方法(SUBDATE関数の使い方)
MySQLでは、SUBDATE() 関数と INTERVAL を組み合わせることで、日付データの「年」の部分だけをまとめて変更できます。2020年から2011年への変更は、両者の差が9年であるため、9年分の日付を減算するだけで実現できます。月や日はそのまま維持される点がポイントです。
SUBDATE()を使った基本的な構文
UPDATE テーブル名
SET 日付カラム名 = SUBDATE(日付カラム名, INTERVAL 9 YEAR);
この構文を実行すると、指定したカラム内のすべての日付から9年が引かれ、2020年のレコードが一括して2011年に変わります。
動作確認用テーブルの作成
それでは、実際に構文を試してみましょう。まずはサンプル用のテーブルを作成します。
mysql> CREATE TABLE ChangeYearFrom2020To2011
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> ExpiryDate date,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.67 sec)
テストデータの挿入
次に、INSERT文を使って2020年の日付データを数件登録します。
mysql> INSERT INTO ChangeYearFrom2020To2011(ExpiryDate) VALUES('2020-09-12');
Query OK, 1 row affected (0.19 sec)
mysql> INSERT INTO ChangeYearFrom2020To2011(ExpiryDate) VALUES('2020-12-21');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO ChangeYearFrom2020To2011(ExpiryDate) VALUES('2020-01-29');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO ChangeYearFrom2020To2011(ExpiryDate) VALUES('2020-06-30');
Query OK, 1 row affected (0.19 sec)
mysql> INSERT INTO ChangeYearFrom2020To2011(ExpiryDate) VALUES('2020-12-31');
Query OK, 1 row affected (0.13 sec)更新前のデータを確認
SELECT文ですべてのレコードを表示し、現在の状態を確認しておきます。
mysql> SELECT * FROM ChangeYearFrom2020To2011;
実行結果は以下の通りです。
+----+------------+
| Id | ExpiryDate |
+----+------------+
| 1 | 2020-09-12 |
| 2 | 2020-12-21 |
| 3 | 2020-01-29 |
| 4 | 2020-06-30 |
| 5 | 2020-12-31 |
+----+------------+
5 rows in set (0.00 sec)
年を2020年から2011年に変更するUPDATE文
ここで本題のクエリです。SUBDATE() で9年分を減算することにより、年だけを2020年から2011年に変更します。
mysql> UPDATE ChangeYearFrom2020To2011
-> SET ExpiryDate = SUBDATE(ExpiryDate, INTERVAL 9 YEAR);
Query OK, 5 rows affected (0.20 sec)
Rows matched: 5 Changed: 5 Warnings: 0
更新後のデータを確認
もう一度SELECT文で全レコードを表示し、結果をチェックしましょう。
mysql> SELECT * FROM ChangeYearFrom2020To2011;
実行結果を見ると、すべての行の年が「2020」から「2011」に変わり、月と日は元のまま保たれていることがわかります。
+----+------------+
| Id | ExpiryDate |
+----+------------+
| 1 | 2011-09-12 |
| 2 | 2011-12-21 |
| 3 | 2011-01-29 |
| 4 | 2011-06-30 |
| 5 | 2011-12-31 |
+----+------------+
5 rows in set (0.00 sec)
補足:特定の行だけを変更したい場合
上記の例ではテーブル内の全レコードが対象になりましたが、WHERE句を追加すれば特定の行だけを更新することも可能です。
UPDATE ChangeYearFrom2020To2011
SET ExpiryDate = SUBDATE(ExpiryDate, INTERVAL 9 YEAR)
WHERE YEAR(ExpiryDate) = 2020;
このように条件を付けておけば、すでに他の年のデータが混在しているテーブルでも、2020年のレコードだけを安全に2011年に変換できます。
注意点:うるう年(2月29日)の扱い
日付の年を変更する際は、2月29日のデータに注意が必要です。たとえば「2020-02-29」は存在しますが、9年前の「2011-02-29」は存在しないため、SUBDATE()による減算結果は「2011-02-28」となり、意図しない日付に補正される可能性があります。該当データが含まれる場合は、事前に確認しておくことをおすすめします。
-
MySQLクエリで日付リストから今日の日付のレコードを取得する方法
概要datetime型のカラムに保存された日付データの中から、今日の日付に該当するレコードを抽出する方法を解説します。ここでは、現在の日付を「2019-07-22」として説明を進めます。テーブルの作成まず、サンプル用のテーブルを作成します。datetime型の「ShippingDate(出荷日)」カラムを持つテーブルを定義しましょう。mysql> create table DemoTable705 (ShippingDate datetime);Query OK, 0 rows affected (0.67 sec)レコードの挿入INSERTコマンドを使って、いくつかのレコードをテーブル
-
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