MySQLでDATETIME型フィールドの日付を更新する方法をわかりやすく解説
MySQLでDATETIME型フィールドの日付部分を更新したい場合、算術演算子のマイナス(-)と INTERVAL を組み合わせることで簡単に実現できます。この記事では、実際のSQL文と実行結果をもとに、具体的な手順を順番に解説していきます。
基本構文
DATETIME型の値から指定した日数を引くには、次のような構文を使用します。
update yourTableName set yourDateTimeColumnName = yourDateTimeColumnName - interval yourValue day where date(yourDateTimeColumnName) = 'yourDateValue';
ポイントは以下の3つです。
interval 数値 dayのように単位を指定して減算できるwhere date(カラム名)を使うことで、時刻を無視して日付だけを条件にできる- 元の時刻部分(00:00:00など)は保持されたまま、日付のみが更新される
サンプルテーブルを作成する
それでは、動作を確認するためにテーブルを作成しましょう。テーブル作成のクエリは次のとおりです。
mysql> create table updateDateDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> ArrivalDate datetime
-> );
Query OK, 0 rows affected (0.66 sec)
Id を自動採番の主キーとし、到着日時を格納する ArrivalDate カラムをDATETIME型で定義しています。
テストデータを挿入する
INSERTコマンドを使って、いくつかのレコードを登録します。
mysql> insert into updateDateDemo(ArrivalDate) values('2011-01-13');
Query OK, 1 row affected (0.19 sec)
mysql> insert into updateDateDemo(ArrivalDate) values('2013-04-21');
Query OK, 1 row affected (0.11 sec)
mysql> insert into updateDateDemo(ArrivalDate) values('2016-12-22');
Query OK, 1 row affected (0.14 sec)
mysql> insert into updateDateDemo(ArrivalDate) values('2017-02-25');
Query OK, 1 row affected (0.27 sec)
mysql> insert into updateDateDemo(ArrivalDate) values('2018-08-19');
Query OK, 1 row affected (0.17 sec)
mysql> insert into updateDateDemo(ArrivalDate) values('2019-02-27');
Query OK, 1 row affected (0.24 sec)
登録済みレコードを確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from updateDateDemo;
実行結果は次のとおりです。
+----+---------------------+ | Id | ArrivalDate | +----+---------------------+ | 1 | 2011-01-13 00:00:00 | | 2 | 2013-04-21 00:00:00 | | 3 | 2016-12-22 00:00:00 | | 4 | 2017-02-25 00:00:00 | | 5 | 2018-08-19 00:00:00 | | 6 | 2019-02-27 00:00:00 | +----+---------------------+ 6 rows in set (0.00 sec)
6件のレコードが正しく登録されていることが確認できました。
DATETIME型フィールドの日付を更新する
ここで、「2019-02-27」のレコードの日付を7日前に更新してみます。実行するクエリは次のとおりです。
mysql> update updateDateDemo -> set ArrivalDate = ArrivalDate - interval 7 day -> where date(ArrivalDate) = '2019-02-27'; Query OK, 1 row affected (0.13 sec) Rows matched: 1 Changed: 1 Warnings: 0
ArrivalDate - interval 7 day により、該当レコードの日付が7日分減算されます。WHERE句で date() 関数を使用しているため、日付が「2019-02-27」と一致するレコードだけが対象になります。
更新後のレコードを確認する
再度SELECT文を実行して、更新結果を確認しましょう。
mysql> select *from updateDateDemo;
実行結果は次のとおりです。
+----+---------------------+ | Id | ArrivalDate | +----+---------------------+ | 1 | 2011-01-13 00:00:00 | | 2 | 2013-04-21 00:00:00 | | 3 | 2016-12-22 00:00:00 | | 4 | 2017-02-25 00:00:00 | | 5 | 2018-08-19 00:00:00 | | 6 | 2019-02-20 00:00:00 | +----+---------------------+ 6 rows in set (0.00 sec)
Id=6のレコードが「2019-02-27」から「2019-02-20」に更新されました。他のレコードには影響がなく、意図したとおり日付だけが変更されています。
補足:INTERVALで使える主な単位
INTERVAL では「day」以外にもさまざまな単位を指定できます。用途に応じて使い分けると便利です。
interval 1 year… 1年加算・減算interval 3 month… 3か月加算・減算interval 10 day… 10日加算・減算interval 5 hour… 5時間加算・減算interval 30 minute… 30分加算・減算interval 45 second… 45秒加算・減算
また、足し算を行いたい場合はマイナスではなくプラス(+)を使えばOKです。さらに、月末日付の扱いなどより柔軟な日付計算が必要な場合は、DATE_SUB() や DATE_ADD() 関数も検討するとよいでしょう。
-
JavaScriptの日時をMySQLの日時形式に変換する方法
JavaScriptで取得した日時をMySQLの日時形式(YYYY-MM-DD HH:MM:SS)に変換するには、toISOString()メソッドを活用するのが便利です。toISOString()は日付をISO 8601形式の文字列(例:2018-11-23T11:14:38.000Z)で返します。この文字列から必要な部分を切り出し、「T」を半角スペースに置き換えることで、MySQLで扱える日時形式に変換できます。以下に、JavaScriptの実装例を示します。サンプルコード<!DOCTYPE html> <html> <head>
-
JavaでMySQLデータベースのレコードを更新する方法【UPDATE文の使い方を実例で解説】
MySQLデータベースのテーブルに格納されたデータを更新するには、UPDATEコマンドを使用します。本記事では、UPDATE文の基本構文から、実際にテーブルを作成し、Java(JDBC)経由でレコードを更新するまでの一連の手順を、サンプルコード付きで詳しく解説します。 UPDATE文の基本構文 MySQLで既存のデータを更新する場合、以下の構文を使用します。 update テーブル名 set カラム名1 = 値1, ....N where 条件; where句で条件を指定しないと、テーブル内のすべてのレコードが更新されてしまうため注意が必要です。 ステップ1:テーブルの作成 まずは更新用のサン