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

MySQLでテーブルの列に現在の日付を自動挿入する方法(CURDATE・NOW関数の使い方)

MySQLでは、CURDATE() 関数や NOW() 関数を使うことで、テーブルの列に現在の日付を自動的に挿入できます。INSERT文の中でこれらの関数を呼び出すだけで、実行時点の日付がレコードに記録されるため、日付を手入力する必要がありません。

CURDATE() と NOW() の違い

  • CURDATE():現在の日付のみを「YYYY-MM-DD」形式で返します。DATE型の列に最適です。
  • NOW():現在の日付と時刻を「YYYY-MM-DD HH:MM:SS」形式で返します。DATETIME型やTIMESTAMP型の列向けの関数ですが、DATE型の列に挿入した場合は日付部分だけが格納されます(その際、警告が出る場合があります)。

実行例

ここでは、year_testing テーブルの OrderDate 列(DATE型)に現在の日付を自動的に挿入してみます。まずは CURDATE() を使った例です。

mysql> INSERT INTO year_testing (OrderDate) VALUES(CURDATE());
Query OK, 1 row affected (0.11 sec)

mysql> SELECT * FROM year_testing;
+------------+
| OrderDate  |
+------------+
| 2017-10-28 |
+------------+
1 row in set (0.00 sec)

このように、CURDATE() を指定するだけで、その日の日付が自動的に登録されました。次に、NOW() を使った場合を見てみましょう。

mysql> INSERT INTO year_testing (OrderDate) VALUES(NOW());
Query OK, 1 row affected, 1 warning (0.12 sec)

mysql> SELECT * FROM year_testing;
+------------+
| OrderDate  |
+------------+
| 2017-10-28 |
| 2017-10-28 |
+------------+
2 rows in set (0.00 sec)

補足ポイント

NOW() は本来日付と時刻の両方を返す関数のため、DATE型の列に挿入すると上記のように「1 warning」が発生します。ただし、格納される値は日付部分のみとなるため、結果としては CURDATE() と同じになります。DATE型の列には CURDATE() を、DATETIME型やTIMESTAMP型の列には NOW() を使うのが望ましい設計です。

また、テーブル定義の時点で列のデフォルト値として設定しておけば、INSERT時に明示的に指定しなくても自動で日付が入るようになります。

CREATE TABLE orders (
    id INT AUTO_INCREMENT PRIMARY KEY,
    order_date DATE DEFAULT (CURDATE())
);

MySQL 8.0以降では、上記のように式をデフォルト値として指定できるため、運用負荷をさらに下げることが可能です。

  1. Javaを使ってDATE型の値をMySQLカラムに挿入する方法【PreparedStatement活用】

    はじめに JavaからMySQLのDATE型カラムに日付データを挿入したい場合、PreparedStatementを使用するのが最も安全で推奨される方法です。SQLインジェクション対策にもなり、日付型の変換もスムーズに行えます。 本記事では、Javaプログラムから現在の日付をMySQLテーブルに挿入する手順を、サンプルコード付きでわかりやすく解説します。 1. サンプルテーブルの作成 まず、DATE型のカラム「ArrivalDate」を含むテーブルを作成します。以下はMySQLでの作成例です。 mysql> create table DemoTable( PassengerId

  2. MySQLトリガー(TRIGGER)を使ってテーブルに現在の日付を自動挿入する方法

    この記事では、MySQLのトリガー(TRIGGER)を使用して、テーブルに現在の日付(DATE)を自動的に挿入する方法を解説します。INSERT文の実行時に日付を指定しなくても、トリガーによって自動的に現在日付が登録される仕組みを見ていきましょう。 サンプルテーブルの作成 まず、以下のクエリでテーブルを作成します。 mysql> create table DemoTable1584-> (-> DueDate datetime-> );Query OK, 0 rows affected (1.79 sec) ここでは、datetime型の「DueDate」カラムを持つテ