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

MySQLのINSERTステートメントでVARCHAR型の日時データに分を加算する方法

はい、MySQLではテーブルに値を挿入する際に、分を加算することが可能です。本記事では、VARCHAR型として保存されている日時データに対して、STR_TO_DATE関数とDATE_ADD関数を組み合わせて分を加算する手順を具体例とともに解説します。

サンプルテーブルの作成

まず、テーブルを作成します。ここでは、日時をVARCHAR型(最大20文字)で格納するカラムを持つテーブルを定義します。

mysql> create table DemoTable2026
    -> (
    -> ArrivalTime varchar(20)
    -> );
Query OK, 0 rows affected (0.40 sec)

INSERT時に分を加算してレコードを挿入する

次に、INSERTコマンドを使ってテーブルにレコードを挿入します。ここでのポイントは、まずSTR_TO_DATE関数でVARCHAR形式の日時文字列を日時型に変換し、その結果に対してDATE_ADD関数で指定した分数を加算している点です。

mysql> insert into DemoTable2026 values(date_add(str_to_date('2017-12-01 11:34:45','%Y-%m-%d %H:%i:%s'), INTERVAL 10 MINUTE));
Query OK, 1 row affected (0.17 sec)

mysql> insert into DemoTable2026 values(date_add(str_to_date('2015-01-31 10:00:00','%Y-%m-%d %H:%i:%s'), INTERVAL 5 MINUTE));
Query OK, 1 row affected (0.10 sec)

mysql> insert into DemoTable2026 values(date_add(str_to_date('2017-12-01 11:34:45','%Y-%m-%d %H:%i:%s'), INTERVAL 20 MINUTE));
Query OK, 1 row affected (0.12 sec)

このように、%Y-%m-%d %H:%i:%sというフォーマット指定子で文字列を解析し、INTERVAL n MINUTEによって任意の分数を柔軟に加算できます。

挿入結果の確認

SELECTステートメントを実行して、テーブル内のすべてのレコードを表示してみましょう。

mysql> select *from DemoTable2026;

実行すると、以下のような出力が得られます。

+---------------------+
| ArrivalTime |
+---------------------+
| 2017-12-01 11:44:45 |
| 2015-01-31 10:05:00 |
| 2017-12-01 11:54:45 |
+---------------------+
3 rows in set (0.00 sec)

出力結果を見ると、元の日時「2017-12-01 11:34:45」に10分加算されて「2017-12-01 11:44:45」になり、別のレコードでは5分加算されて「2015-01-31 10:05:00」、さらに同じ元データに20分加算した例では「2017-12-01 11:54:45」となっていることが確認できます。

この手法を使えば、VARCHAR型で保存された日時文字列でも、挿入の時点で簡単に時間計算を行うことができます。なお、頻繁に日時計算を行う場合は、カラムの型をDATETIME型にしておくと、変換の手間が省けパフォーマンス面でも有利になります。

  1. MySQLトリガーで1つ目のテーブルへのINSERT時に2つ目のテーブルへレコードを自動挿入する方法

    MySQLでは、トリガー(TRIGGER)を活用することで、あるテーブルにレコードが挿入されたタイミングで、別のテーブルにも自動的にデータを登録できます。本記事では、「BEFORE INSERT」トリガーを使用し、1つ目のテーブルへの挿入をきっかけに2つ目のテーブルへレコードを追加する手順を解説します。基本構文トリガーを作成する際の基本的な構文は以下のとおりです。DELIMITER //create trigger yourTriggerName before insert on yourTableName1    for each row &

  2. auto_increment値を指定せずにMySQLテーブルへレコードを挿入する方法

    auto_increment値なしでレコード挿入は可能か?はい、可能です。AUTO_INCREMENTが設定されたカラムは、INSERT時に値を明示的に指定しなくても、MySQLが自動的に連番を採番してくれるためです。この記事では、実際にテーブルを作成し、auto_increment値を省略してレコードを挿入する手順を解説します。1. テーブルの作成まず、EmployeeIdカラムにAUTO_INCREMENTとPRIMARY KEYを設定したテーブルを作成します。mysql> create table DemoTable1479 -> ( -> Employ