MySQLの日付カラムに現在の日時を自動的に挿入する方法
MySQLで日付のデフォルト値を自動設定する
MySQLでは、NOW()関数をデフォルト値として指定することで、レコード挿入時に現在の日付と時刻を自動的に入力できます。また、後から日付部分だけを取り出したい場合は、DATE()関数を使用します。
ケース1:特定の日付をデフォルト値にする
あらかじめ決まった日付をデフォルト値として設定する場合は、次のような構文を使います。
yourDateColumnName DATE DEFAULT 'yourDateValue';
ケース2:現在の日時を自動的に挿入する
レコード挿入時点の現在日時を自動的に記録したい場合は、NOW()をデフォルト値に指定します。
yourDateColumnName DATETIME DEFAULT NOW();
※ MySQL 5.6.5以降では、DATETIME型やTIMESTAMP型のカラムに対してCURRENT_TIMESTAMPやNOW()をデフォルト値として利用できるようになっています。
実際にテーブルを作成して確認してみよう
まず、NOW()をデフォルト値にもつテーブルを作成します。テーブル作成のクエリは以下の通りです。
mysql> create table DefaultCurrentdateDemo -> ( -> LoginDate datetime default now() -> ); Query OK, 0 rows affected (0.59 sec)
続いて、INSERT文でいくつかレコードを挿入します。値を指定せずに挿入した行には、現在の日時が自動的に入ります。
mysql> insert into DefaultCurrentdateDemo values();
Query OK, 1 row affected (0.18 sec)
mysql> insert into DefaultCurrentdateDemo values('2017-11-19');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DefaultCurrentdateDemo values('2018-10-21');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DefaultCurrentdateDemo values();
Query OK, 1 row affected (0.23 sec)
mysql> insert into DefaultCurrentdateDemo values('2020-12-24');
Query OK, 1 row affected (0.12 sec)
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DefaultCurrentdateDemo;
実行結果は以下の通りです。値を指定しなかった2行には、挿入時の日時が自動的に記録されていることがわかります。
+---------------------+ | LoginDate | +---------------------+ | 2019-01-12 20:33:51 | | 2017-11-19 00:00:00 | | 2018-10-21 00:00:00 | | 2019-01-12 20:34:37 | | 2020-12-24 00:00:00 | +---------------------+ 5 rows in set (0.00 sec)
DATE()関数で日付部分だけを抽出する
DATETIME型から時刻を除いた日付だけを取得したい場合は、DATE()関数を使います。
mysql> select date(LoginDate) as OnlyDate from DefaultCurrentdateDemo;
実行結果は以下の通りです。
+------------+ | OnlyDate | +------------+ | 2019-01-12 | | 2017-11-19 | | 2018-10-21 | | 2019-01-12 | | 2020-12-24 | +------------+ 5 rows in set (0.00 sec)
特定の日付をデフォルト値にした場合の動作
次に、固定の日付をデフォルト値として設定したDATE型カラムを持つテーブルを作成してみます。
mysql> create table DefaultDate -> ( -> LoginDate date default '2019-01-12' -> ); Query OK, 0 rows affected (0.53 sec)
このテーブルに値を指定せずにレコードを挿入すると、カラムには自動的にデフォルト値が設定されます。
mysql> insert into DefaultDate values(); Query OK, 1 row affected (0.13 sec)
SELECT文で確認してみましょう。
mysql> select *from DefaultDate;
実行結果は以下の通りです。
+------------+ | LoginDate | +------------+ | 2019-01-12 | +------------+ 1 row in set (0.00 sec)
まとめ
- 現在の日時を自動挿入したい場合は、DATETIME型のカラムに
DEFAULT NOW()を指定する。 - 特定の日付を常にデフォルトにしたい場合は、DATE型のカラムに
DEFAULT 'YYYY-MM-DD'の形式で指定する。 - DATETIME型から日付だけを取り出すには、
DATE()関数を使用する。
-
MySQLクエリで日付・時刻の値を秒単位で加算(インクリメント)する方法
MySQLで日付・時刻(DATETIME)の値に指定した秒数を加算したい場合は、DATE_ADD()関数とINTERVAL句を組み合わせて使用します。この記事では、実際にテーブルを作成し、秒単位で時刻をインクリメントする手順を具体例とともに解説します。 サンプルテーブルの作成 まず、DATETIME型のカラムを持つテーブルを作成しましょう。 mysql> create table DemoTable1867 ( ArrivalTime datetime &
-
JavaとMySQLで現在の日付に月数を追加する方法(INTERVAL句の使い方)
JavaとMySQLを組み合わせて現在の日付に月数を追加するには、INTERVAL句を使用します。以下がその基本構文です。 String query; query = insert into テーブル名 values(curdate()+interval 追加する月数 month); 現在の日付を確認する まず、curdate()関数を使って現在の日付を確認してみましょう。 mysql> select curdate(); +------------+ | curdate() | +------------+ | 2020-10-25 | +------------+ 1 row in