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

MySQLで「X日前」の日時を持つ行を挿入する方法

MySQLでは、CURRENT_TIMESTAMPとINTERVALを組み合わせることで、「現在日時からX日前」のようなタイムスタンプを持つ行を簡単に挿入できます。以下の構文を使用します。

insert into yourTableName values(CURRENT_TIMESTAMP - INTERVAL ABS(RAND() * 100) DAY);

この構文では、RAND()関数で生成した0〜100までのランダムな値をABS()で絶対値に変換し、その日数分だけ現在日時から遡った日時を挿入しています。つまり、実行するたびに「最大100日前」のランダムな日付が登録される仕組みです。

動作確認用テーブルの作成

まず、実際に構文を試すためのサンプルテーブルを作成しましょう。

mysql> create table DemoTable1983
    (
    DueDate timestamp
    );
Query OK, 0 rows affected (0.00 sec)

ここでは、timestamp型の「DueDate(期限日)」カラムを1つだけ持つシンプルなテーブルを作成しました。

レコードの挿入

次に、INSERT文を使ってレコードを3件挿入します。

mysql> insert into DemoTable1983 values(CURRENT_TIMESTAMP - INTERVAL ABS(RAND() * 100) DAY);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1983 values(CURRENT_TIMESTAMP - INTERVAL ABS(RAND() * 100) DAY);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1983 values(CURRENT_TIMESTAMP - INTERVAL ABS(RAND() * 100) DAY);
Query OK, 1 row affected (0.00 sec)

INSERT文を実行するたびにRAND()が再評価されるため、それぞれ異なる日数分遡った日時が記録されます。

挿入結果の確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select * from DemoTable1983;

実行結果は以下のようになります。

+---------------------+
| DueDate             |
+---------------------+
| 2019-12-10 19:35:43 |
| 2019-10-27 19:35:44 |
| 2019-11-10 19:35:45 |
+---------------------+
3 rows in set (0.00 sec)

3件のレコードが、それぞれ異なる過去の日時で挿入されていることがわかります。

現在日時との比較

参考として、このときの現在日時をNOW()関数で確認してみます。

mysql> select now();

実行結果:

+---------------------+
| now()               |
+---------------------+
| 2019-12-18 19:36:17 |
+---------------------+
1 row in set (0.00 sec)

現在日時が「2019-12-18 19:36:17」であることに対して、挿入されたレコードは8日前・52日前・38日前など、さまざまな過去の日時になっていることが確認できます。

まとめ

CURRENT_TIMESTAMP - INTERVAL n DAYという式を使えば、現在日時から指定した日数だけ前の日時を簡単に生成できます。RAND()と組み合わせれば、テストデータとして過去のランダムな日付を大量に作成したい場合にも便利です。なお、固定の日数を指定したい場合は、CURRENT_TIMESTAMP - INTERVAL 7 DAYのように直接数値を書けばOKです。

  1. MySQLで最後の行(レコード)を取得する方法をわかりやすく解説

    MySQLで最後の行を選択する基本の考え方 MySQLでテーブルの最後の行(最終レコード)を取得したい場合、ORDER BY句に降順(DESC)を指定し、LIMIT 1と組み合わせるのが最も一般的で効率的な方法です。 この記事では、実際にテーブルを作成してデータを挿入しながら、最後のレコードを取得する手順を具体的なクエリ例とともに解説します。 サンプルテーブルの作成 まず、CREATE TABLE文を使ってテスト用のテーブルを作成します。 mysql> create table getLastRecord -> ( -> Id int, -> Na

  2. JavaでMySQLデータベースにデータを挿入する方法をわかりやすく解説

    JavaからMySQLデータベースにデータを挿入するには、SQLのINSERTコマンドを使用します。基本的な構文は以下の通りです。 INSERT INTO テーブル名(カラム名1, カラム名2, ......カラム名N) VALUES(値1, 値2, ......値N); ここからは、Javaプログラムを使って実際にMySQLデータベースへレコードを挿入する手順を、順を追って見ていきましょう。 ステップ1:MySQLでテーブルを作成する まず、データの挿入先となるテーブルをMySQL側に作成します。以下のクエリを実行してください。 mysql> create table Insert