UPDATE文を使わずにMySQLのINSERT時に列の値を加算して設定する方法
MySQLでは、INSERTクエリを実行する際にDATE_ADD()関数を組み合わせることで、UPDATE文を使わずとも日付や時刻に対して分・時間・日・月・年を加算した値を直接挿入できます。本記事では、その具体的な手順をサンプルコードとともに解説します。
1. サンプルテーブルを作成する
まず、DATETIME型のカラムを持つテーブルを作成します。
mysql> create table DemoTable816(DueDate datetime); Query OK, 0 rows affected (0.45 sec)
2. INSERT時にDATE_ADD()で日付を加算して挿入する
次に、INSERTコマンドを使ってレコードを挿入します。ポイントは、DATE_ADD()関数とINTERVAL句を組み合わせることで、挿入時点で指定した単位(分・時間・日・月・年)の日付計算を行えることです。
mysql> insert into DemoTable816 values(date_add(now(),interval 3 minute));
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable816 values(date_add('2018-01-21 00:00:00',interval 3 Hour));
Query OK, 1 row affected (0.52 sec)
mysql> insert into DemoTable816 values(date_add('2016-11-11 12:40:00',interval 3 Day));
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable816 values(date_add('2018-12-01 11:00:00',interval 3 Month));
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable816 values(date_add('2011-03-21 10:00:00',interval 3 Year));
Query OK, 1 row affected (0.16 sec)上記の例では、以下のようにさまざまなパターンで日付を加算しています。
- NOW():現在日時から3分後を挿入
- HOUR:指定日時から3時間後を挿入
- DAY:指定日時から3日後を挿入
- MONTH:指定日時から3か月後を挿入
- YEAR:指定日時から3年後を挿入
3. 挿入結果を確認する
SELECT文ですべてのレコードを表示して結果を確認します。
mysql> select *from DemoTable816;
実行すると、次のような出力が得られます。
+---------------------+ | DueDate | +---------------------+ | 2019-08-03 13:08:43 | | 2018-01-21 03:00:00 | | 2016-11-14 12:40:00 | | 2019-03-01 11:00:00 | | 2014-03-21 10:00:00 | +---------------------+ 5 rows in set (0.00 sec)
まとめ
このように、INSERT文の中でDATE_ADD()関数を使用すれば、一度データを挿入してからUPDATE文で修正するという二度手間を省けます。期限日(DueDate)のように「基準日から一定期間後」の日付を登録したいケースで特に便利なテクニックなので、ぜひ活用してみてください。
-
MySQLで最初の3件のレコードに特定の値を設定する方法
MySQLで、テーブルの最初の3件のレコードだけに特定の値を設定したい場合は、UPDATE文と組み合わせて LIMIT 3 を使用します。MySQLのUPDATE文は ORDER BY 句と LIMIT 句をサポートしているため、更新対象の行数を簡単に制御できます。ここでは、実際の手順をサンプルコードとともに解説します。 サンプルテーブルの作成 まず、テーブルを作成しましょう。 mysql> create table DemoTable1968 ( Id int NOT NULL AUTO_I
-
MySQLのAUTO_INCREMENTとは?自動採番と初期値の設定方法をわかりやすく解説
AUTO_INCREMENT属性の基本MySQLのAUTO_INCREMENT属性は、新しい行に対して一意の識別子(連番)を自動的に生成するために使用されます。カラムが「NOT NULL」として宣言されている場合、そのカラムにNULLを代入することで、連番のシーケンスを生成することが可能です。AUTO_INCREMENTカラムに任意の値を挿入すると、そのカラムは指定した値に設定され、同時にシーケンスもリセットされます。以降は、挿入された最大値を起点として、連続した値が自動的に生成されていきます。また、既存のAUTO_INCREMENTカラムを更新した場合も、AUTO_INCREMENTのシーケ