SQLのユーザー定義変数で増分値を設定し、複数のタイムスタンプ値をまとめてインクリメントする方法
MySQLでは、増分値をユーザー定義変数(セッション変数)に設定しておくことで、複数のタイムスタンプ値をまとめて指定秒数だけ進めることができます。ここでは「yourValue」が増分値に相当します。変数を設定した後、UPDATE文とINTERVAL句を組み合わせてカラムの値を更新します。
基本構文
まず、SET文でユーザー定義変数に増分値を代入し、続いてUPDATE文でタイムスタンプ型のカラムを更新します。
set @anyVariableName := yourValue;
update yourTableName set yourColumnName = yourColumnName + interval (@anyVariableName) second;
実際に試してみよう
1. テーブルを作成する
まずはサンプル用のテーブルを作成します。
mysql> create table DemoTable
(
DueDatetime timestamp
);
Query OK, 0 rows affected (0.73 sec)
2. レコードを挿入する
INSERT文を使って、テーブルにいくつかのデータを追加します。
mysql> insert into DemoTable values('2019-01-31 12:30:40');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable values('2019-09-06 10:00:00');
Query OK, 1 row affected (0.73 sec)
mysql> insert into DemoTable values('2019-09-07 11:10:24');
Query OK, 1 row affected (0.25 sec)3. 現在のレコードを確認する
SELECT文で、テーブル内のすべてのレコードを表示してみましょう。
mysql> select * from DemoTable;
すると、次のような出力が得られます。
+-----------------------+
| DueDatetime |
+-----------------------+
| 2019-01-31 12:30:40 |
| 2019-09-06 10:00:00 |
| 2019-09-07 11:10:24 |
+-----------------------+
3 rows in set (0.00 sec)
複数のタイムスタンプ値をインクリメントする
それでは、ユーザー定義変数に「12」を設定し、すべてのタイムスタンプ値を12秒ずつ増やしてみます。
mysql> set @secondValue :=12;
Query OK, 0 rows affected (0.00 sec)
mysql> update DemoTable set DueDatetime=DueDatetime+interval (@secondValue) second;
Query OK, 3 rows affected (0.99 sec)
Rows matched: 3 Changed: 3 Warnings: 0
更新後のレコードを確認する
もう一度SELECT文を実行して、テーブルの内容をチェックしてみましょう。
mysql> select * from DemoTable;
実行結果は以下の通りです。すべてのタイムスタンプ値が12秒増加していることが確認できます。
+-----------------------+
| DueDatetime |
+-----------------------+
| 2019-01-31 12:30:52 |
| 2019-09-06 10:00:12 |
| 2019-09-07 11:10:36 |
+-----------------------+
3 rows in set (0.00 sec)
このように、ユーザー定義変数とINTERVAL句を組み合わせれば、単一のUPDATE文で複数行のタイムスタンプ値を柔軟に加算できます。なお、INTERVAL句の単位を「second」から「minute」や「hour」などに変更すれば、秒以外の単位でも同様に処理可能です。
-
【初心者向け】MySQLオプションの基本!値の指定方法と「=」記号のルールを解説
本記事では、MySQLにおけるオプションのデフォルト動作、値を必要とするオプション、そして「=」(イコール)記号の扱いについて詳しく解説します。 値を指定するオプションの基本的な書き方 慣例として、値を設定する形式のロングオプションは「=」記号を使って記述します。以下のように書くのが一般的です。 mysql --host=tonfisk --user=jon 一方、値が必須となるオプション(デフォルト値を持たないオプション)については、「=」記号は必須ではありません。つまり、スペース区切りで次のように書いても正しく動作します。 mysql --host tonfisk --user jon
-
MySQLコマンドラインクライアント(mysql)の使い方と基本操作
mysqlは、入力行編集機能を備えたシンプルなSQLシェルです。対話型と非対話型の両方の利用方法をサポートしており、MySQLデータベースを操作する際の基本的なツールとして広く使われています。出力フォーマットの特徴対話モードで使用した場合、クエリの実行結果はASCIIテーブル形式で整形されて表示されます。一方、フィルタのようにパイプやリダイレクトと組み合わせて非対話的に使用した場合は、結果がタブ区切り形式で出力されます。この出力形式は、コマンドラインオプションを使って自由に変更することが可能です。--quickオプションによるメモリの節約大量の結果セットを扱う際にメモリ不足で問題が発生する場合