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

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 構文を使用するようにしましょう。

  1. MySQLでDATETIME型の日時に日数を追加する方法

    MySQLでは、DATE_ADD()関数を使うことで、DATETIME型の値に指定した日数を簡単に追加できます。この記事では、実際にテーブルを作成し、日時フィールドに日数を加算するまでの手順を具体例とともに解説します。 1. テーブルの作成 まず、DATETIME型のカラムを持つテーブルを作成します。 mysql> create table DemoTable1871     (     ArrivalDate datetime     ); Query OK, 0

  2. C++で秒数を日・時・分・秒に変換する方法

    このチュートリアルでは、C++を使って秒数を「日・時・分・秒」の形式に変換するプログラムについて解説します。 具体的には、任意の秒数が与えられたとき、それを適切な日数、時間、分、秒へとそれぞれ変換することを目指します。 変換の考え方 時間の単位は以下のような関係になっています。 1日 = 24時間 = 86,400秒(24 × 3600) 1時間 = 3,600秒 1分 = 60秒 そこで、入力された秒数をまず 86,400 で割って「日数」を求め、その剰余に対して同様に 3,600 で割って「時間」、さらに 60 で割って「分」を算出し、最後に残った値が「秒」となります。 サンプルコ