【MySQL】すでに挿入されている日時レコードに「現在時刻−1時間」を設定する方法
はじめに
MySQLで日時から時間を引いて計算したい場合は、DATE_SUB()関数を使用します。本記事では、テーブルにすでに挿入されている日時レコードに対して、「現在時刻から1時間を引いた値」を設定する方法を、実際のコード例とともに順を追って解説します。
1. テーブルの作成
まず、DATETIME型のカラムを持つテーブルを作成しましょう。
mysql> create table DemoTable1434
-> (
-> ArrivalDatetime datetime
-> );
Query OK, 0 rows affected (3.14 sec)2. レコードの挿入
次に、INSERT文を使って複数のレコードをテーブルに追加します。
mysql> insert into DemoTable1434 values('2019-09-30 21:10:00');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1434 values('2018-09-30 22:20:40');
Query OK, 1 row affected (0.33 sec)
mysql> insert into DemoTable1434 values('2017-09-30 23:10:00');
Query OK, 1 row affected (0.19 sec)3. レコードの確認
SELECT文でテーブル内のすべてのレコードを表示してみましょう。
mysql> select * from DemoTable1434;実行結果は以下の通りです。
+---------------------+
| ArrivalDatetime |
+---------------------+
| 2019-09-30 21:10:00 |
| 2018-09-30 22:20:40 |
| 2017-09-30 23:10:00 |
+---------------------+
3 rows in set (0.00 sec)4. 現在時刻から1時間前の日時に更新するクエリ
ここが本題です。「現在時刻から1時間を引いた値」を設定するには、UPDATE文とDATE_SUB()を組み合わせて以下のように記述します。
mysql> update DemoTable1434
-> set ArrivalDatetime=date_sub(now(),interval 1 hour);
Query OK, 3 rows affected (0.19 sec)
Rows matched: 3 Changed: 3 Warnings: 0ポイントは、now()で現在の日時を取得し、date_sub(now(), interval 1 hour)によってその1時間前の日時を計算しているところです。これにより、すべてのレコードのArrivalDatetimeが一括で更新されます。
5. 現在の日時の確認
参考として、クエリ実行時点での現在日時を確認しておきましょう。
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2019-09-30 21:16:48 |
+---------------------+
1 row in set (0.00 sec)6. 更新結果の確認
最後に、もう一度テーブルのレコードを表示して、正しく更新されたか確認します。
mysql> select * from DemoTable1434;実行結果:
+---------------------+
| ArrivalDatetime |
+---------------------+
| 2019-09-30 20:16:39 |
| 2019-09-30 20:16:39 |
| 2019-09-30 20:16:39 |
+---------------------+
3 rows in set (0.00 sec)現在日時が「21:16:48」だったのに対し、すべてのレコードが約1時間前の「20:16:39」に更新されているのが分かります。
まとめ
DATE_SUB(now(), INTERVAL 1 HOUR)を使えば、現在時刻から1時間前の日時を簡単に取得・設定できます。既存レコードのUPDATEだけでなく、INSERT文と組み合わせれば新規レコードへの挿入にも応用可能です。また、間隔の指定をINTERVAL 1 DAYやINTERVAL 30 MINUTEなどに変えれば、任意の期間の加減算にも対応できます。日時を扱う処理では非常に便利なテクニックなので、ぜひ覚えておきましょう。
-
MySQLのINSERT INTO SELECT文で複数のテーブルからレコードを挿入する方法
複数のテーブルからレコードを挿入するには、INSERT INTO ... SELECT 文を使用します。この記事では、2つのテーブルのデータを組み合わせて、別のテーブルへレコードを挿入する手順を、実際の実行例とともに解説します。 1つ目のテーブルを作成する まず、挿入元となる1つ目のテーブルを作成しましょう。 mysql> create table DemoTable1943 ( Name varchar(20) ); Query OK, 0 rows affected (0.00 sec) サンプルデータを挿入する INSERTコマンドを使って、テーブルにレコー
-
MySQLで複数のレコードをすばやく一括挿入するクエリの書き方
MySQLで複数のレコードを効率よく挿入したい場合、INSERT文を何度も実行するのではなく、1つのINSERT文で複数行をまとめて指定するのがおすすめです。この方法ならデータベースとの通信回数が減り、処理速度が大幅に向上します。 基本構文 複数のレコードをすばやく挿入するには、単一のINSERT文を使い、以下の構文に従います。 insert into yourTableName values(yourValue1,yourValue2,...N),(yourValue1,yourValue2,...N).....N; ポイントは、各行の値セットをカンマ(,)で区切って並べるだけというシンプル