CURRENT_DATE / NOW
| 対応: | SQL-92(1992) |
|---|
現在の日付や日時を取得する関数・式です。システム時刻をSQLで参照したいときに使用します。
構文
現在の日付を取得します(標準SQL)。
SELECT CURRENT_DATE;
現在の時刻を取得します(標準SQL)。
SELECT CURRENT_TIME;
現在の日時を取得します(標準SQL)。
SELECT CURRENT_TIMESTAMP;
現在の日時を取得します(MySQL 関数)。
SELECT NOW();
クエリ実行時点の日時を取得します(MySQL)。
SELECT SYSDATE();
構文一覧
| 構文 | 概要 |
|---|---|
| CURRENT_DATE | 現在の日付を『DATE』型(YYYY-MM-DD形式)で返します。標準SQLで括弧は不要です。 |
| CURRENT_TIME | 現在の時刻を『TIME』型(HH:MM:SS形式)で返します。標準SQLで括弧は不要です。 |
| CURRENT_TIMESTAMP | 現在の日時を『TIMESTAMP』型で返します。標準SQLで括弧は不要です。 |
| NOW() | MySQLで現在の日時を返します。ステートメント開始時刻を返す点が特徴です。 |
| SYSDATE() | MySQLでSQL実行時点の日時を返します。NOW()と異なり、呼び出しのたびに異なる値を返す場合があります。 |
サンプルコード
以下の『members』テーブルを例に説明します。
現在日付を取得します。
sample_current_date_now.sql
SELECT CURRENT_DATE AS today;
+------------+ | today | +------------+ | 2026-03-16 | +------------+ 1 row in set
現在日時を取得します。
sample_current_date_now.sql
SELECT NOW() AS current_datetime;
+---------------------+ | current_datetime | +---------------------+ | 2026-03-16 14:32:07 | +---------------------+ 1 row in set
有効期限が今日以降の会員を取得します。
sample_current_date_now.sql
SELECT member_id, name, expire_date FROM members WHERE expire_date >= CURRENT_DATE;
+-----------+------------+-------------+ | member_id | name | expire_date | +-----------+------------+-------------+ | 1 | 岡部倫太郎 | 2026-03-31 | | 3 | 椎名まゆり | 2026-06-30 | +-----------+------------+-------------+ 2 rows in set
有効期限を現在日時で更新します。
sample_current_date_now.sql
UPDATE members SET expire_date = NOW() WHERE member_id = 2;
Query OK, 1 row affected (0.01 sec)
SELECT member_id, name, expire_date FROM members WHERE member_id = 2;
+-----------+------------+---------------------+ | member_id | name | expire_date | +-----------+------------+---------------------+ | 2 | 牧瀬紅莉栖 | 2026-03-16 14:32:07 | +-----------+------------+---------------------+ 1 row in set
現在日時と比較して期限切れの会員を取得します。
sample_current_date_now.sql
SELECT member_id, name, expire_date FROM members WHERE expire_date < CURRENT_DATE;
+-----------+------------+-------------+ | member_id | name | expire_date | +-----------+------------+-------------+ | 2 | 牧瀬紅莉栖 | 2025-12-31 | +-----------+------------+-------------+ 1 row in set
データベース別の書き方
MySQL / MariaDB
『CURRENT_DATE』『CURRENT_TIME』『CURRENT_TIMESTAMP』と、MySQL固有の『NOW()』『SYSDATE()』が使用できます。
SELECT CURRENT_DATE; SELECT CURRENT_TIMESTAMP; SELECT NOW();
PostgreSQL
『CURRENT_DATE』『CURRENT_TIME』『CURRENT_TIMESTAMP』が使用できます。現在の日時には『NOW()』も使用できます。
SELECT CURRENT_DATE; SELECT CURRENT_TIMESTAMP; SELECT NOW();
SQLite
SQLite では『CURRENT_DATE』『CURRENT_TIME』『CURRENT_TIMESTAMP』が使用できます。日時は文字列(TEXT型)で返されます。
SELECT CURRENT_DATE;
SELECT CURRENT_TIMESTAMP;
SELECT date('now');
SELECT datetime('now');
概要
『CURRENT_DATE』『CURRENT_TIME』『CURRENT_TIMESTAMP』は標準SQLで定義された式であり、MySQLでもPostgreSQLでも動作します。一方、『NOW()』はMySQL独自の関数で、ステートメント開始時刻を返します。トランザクション内で複数回呼び出しても同じ値を返すため、一貫性が保たれます。
『SYSDATE()』はSQL実行時点の実際の時刻を返すため、同一ステートメント内でも呼び出しのたびに異なる値になる場合があります。通常は『NOW()』を使用するほうが安全です。
日付を加算・減算するには『DATE_ADD / DATEDIFF』を、日付から年や月を取り出すには『EXTRACT / FORMAT』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。