MySQLで現在日時(NOW())に5日・時間・分・秒を加算して更新する方法
MySQLで現在の日時(NOW())を基準に、5日後・5時間後・5分後・5秒後の日時へ更新したい場合は、NOW() + INTERVAL 構文を使用します。単純な数値の加算ではなく INTERVAL を使うことで、日・時・分・秒を正確に加算できます。
この記事では、実際にテーブルを作成し、データを挿入して、INTERVAL 構文で日時を更新するまでの一連の手順を解説します。
1. テーブルの作成
まず、ユーザー情報の有効期限を管理するためのテーブルを作成します。以下のクエリを実行してください。
mysql> create table UserInformationExpire
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> UserName varchar(10),
-> UserInformationExpireDateTime datetime not null
-> );
Query OK, 0 rows affected (0.83 sec)
2. テストデータの挿入
次に、INSERT文を使ってサンプルデータを4件登録します。
mysql> insert into UserInformationExpire(UserName,UserInformationExpireDateTime)
values('Maxwell','2019-02-09 23:56:27');
Query OK, 1 row affected (0.22 sec)
mysql> insert into UserInformationExpire(UserName,UserInformationExpireDateTime)
values('Carol','2018-11-21 15:45:21');
Query OK, 1 row affected (0.24 sec)
mysql> insert into UserInformationExpire(UserName,UserInformationExpireDateTime)
values('Bob','2019-01-22 16:30:35');
Query OK, 1 row affected (0.25 sec)
mysql> insert into UserInformationExpire(UserName,UserInformationExpireDateTime)
values('Larry','2017-12-25 17:20:33');
Query OK, 1 row affected (0.20 sec)
3. 登録データの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from UserInformationExpire;
出力結果
+----+----------+-------------------------------+ | Id | UserName | UserInformationExpireDateTime | +----+----------+-------------------------------+ | 1 | Maxwell | 2019-02-09 23:56:27 | | 2 | Carol | 2018-11-21 15:45:21 | | 3 | Bob | 2019-01-22 16:30:35 | | 4 | Larry | 2017-12-25 17:20:33 | +----+----------+-------------------------------+ 4 rows in set (0.00 sec)
4. 現在日時から5日後に更新する
ここからが本題です。Id = 1 のレコード(Maxwell)の有効期限を、現在日時から5日後に更新します。この例では現在日が 2019-02-09 なので、更新後は 2019-02-14 になります。
mysql> update UserInformationExpire set UserInformationExpireDateTime = now()+interval 5 day where Id = 1; Query OK, 1 row affected (0.24 sec) Rows matched: 1 Changed: 1 Warnings: 0
5. 更新結果の確認
もう一度SELECT文を実行して、Id = 1 のレコードだけが更新されていることを確認しましょう。
mysql> select *from UserInformationExpire where Id = 1;
出力結果
+----+----------+-------------------------------+ | Id | UserName | UserInformationExpireDateTime | +----+----------+-------------------------------+ | 1 | Maxwell | 2019-02-14 23:56:27 | +----+----------+-------------------------------+ 1 row in set (0.00 sec)
時刻部分(23:56:27)はそのまま維持され、日付だけが5日進んでいることがわかります。WHERE句で対象レコードを絞り込んでいるため、他のユーザーのデータには影響しません。
時間・分・秒を加算する場合
INTERVAL の単位を変えるだけで、日以外の単位も自由に加算できます。
- 5時間後:
NOW() + INTERVAL 5 HOUR - 30分後:
NOW() + INTERVAL 30 MINUTE - 10秒後:
NOW() + INTERVAL 10 SECOND - 複合指定(5日と3時間後など):
NOW() + INTERVAL '5 3' DAY_HOUR
また、DATE_ADD(NOW(), INTERVAL 5 DAY) のように関数形式で書いても同じ結果が得られます。逆に日時を減算したい場合は DATE_SUB() を使うか、INTERVAL -5 DAY のように負の値を指定してください。
注意点:NOW() + 5 のような数値加算は避ける
NOW() + 5 のように数値を直接足すと、MySQLは日時を「YYYYMMDDHHMMSS」形式の数値として扱うため、意図しない結果になる恐れがあります。日時の加算・減算には、必ず INTERVAL 構文を使用するようにしましょう。
-
MySQLでDATETIME型の日時に日数を追加する方法
MySQLでは、DATE_ADD()関数を使うことで、DATETIME型の値に指定した日数を簡単に追加できます。この記事では、実際にテーブルを作成し、日時フィールドに日数を加算するまでの手順を具体例とともに解説します。 1. テーブルの作成 まず、DATETIME型のカラムを持つテーブルを作成します。 mysql> create table DemoTable1871 ( ArrivalDate datetime ); Query OK, 0
-
C++で秒数を日・時・分・秒に変換する方法
このチュートリアルでは、C++を使って秒数を「日・時・分・秒」の形式に変換するプログラムについて解説します。 具体的には、任意の秒数が与えられたとき、それを適切な日数、時間、分、秒へとそれぞれ変換することを目指します。 変換の考え方 時間の単位は以下のような関係になっています。 1日 = 24時間 = 86,400秒(24 × 3600) 1時間 = 3,600秒 1分 = 60秒 そこで、入力された秒数をまず 86,400 で割って「日数」を求め、その剰余に対して同様に 3,600 で割って「時間」、さらに 60 で割って「分」を算出し、最後に残った値が「秒」となります。 サンプルコ