SQL道場 日付時刻関数 SYSDATE関数

SQLで現在の日付と時刻を得るSYSDATE関数について記載しています。

対応データベース:MySQL Oracle

SYSDATE関数の文法

SELECT SYSDATE FROM テーブル
引数なし
返値日付型 現在の日付と時刻が戻ります。

SYSDATE関数は、現在の日付と時刻を戻します。現在の日付を取得する場合はCURRENT_DATE/CURRENT DATE関数を、現在の時刻を取得する場合はCURRENT_TIME、CURRENT TIME関数を使います。

MySQLの場合は、now()関数とSysdate関数がありますが、挙動が異なりパフォーマンス的にはnow()が良さそうなのでnow()を使用する方が無難

MySQL

関数が文字列または数値のどちらのコンテキストで使用されているかに応じて、現在の日時を’YYYY-MM-DD hh:mm:ss’または YYYYMMDDhhmmss 形式の値として返します。

SYSDATE() は、実行された時間を返します。 これは、ステートメントが実行を開始する時間を示す定数時間を返す NOW() の動作とは異なります。 (ストアドファンクションまたはトリガーでは、NOW() は関数またはトリガーステートメントが実行を開始する時間を返します。)

さらに、SET TIMESTAMP ステートメントによって、NOW() で返された値は影響を受けますが、SYSDATE() で返された値は影響を受けません。 つまり、バイナリログのタイムスタンプ設定は、SYSDATE() の呼び出しに影響しないことを意味します。

SYSDATE() は、同じステートメント内でもさまざまな値を返すことができ、SET TIMESTAMP による影響も受けないため、非決定的です。そのため、ステートメントベースのバイナリロギングが使用されている場合は、レプリケーションで安全に使用できません。 これが問題となる場合は、行ベースのロギングを使用できます。

また、–sysdate-is-now オプションを使用すると、SYSDATE() を NOW() のエイリアスにすることができます。 これは、レプリケーションソースサーバーとレプリカの両方でこのオプションが使用されている場合に機能します。

SYSDATE() に非決定的な特性があるということは、それを参照する式を評価する際にインデックスを使用できないことも意味します。

https://dev.mysql.com/doc/refman/8.0/ja/date-and-time-functions.html#function_sysdate

実行例

MySQLの実行例

/* MySQL 現在の日付と時間を取得するサンプル */
SELECT SYSDATE();
SYSDATE関数サンプル実行結果