MySQLで現在の日付/時刻を返す場合、選択できる関数の範囲があります。これらのほとんどは、単に別の関数の同義語です。
ただし、同じことをしているように見える2つの関数がありますが、実際にはわずかに異なります。私が参照している関数はSYSDATE()
です およびNOW()
。
SYSDATE()とNOW()の違い
どちらの関数も現在の日付と時刻を返します。ただし、違いは次のとおりです。
-
SYSDATE()
実行時間を返します。 -
NOW()
ステートメントが存在する時間を示す定数時間を返します。 実行を開始しました。 -
SET TIMESTAMP
ステートメントは、NOW()
によって返される値に影響します ただし、SYSDATE()
ではありません 。
そのため、多くの場合、使用する関数に関係なく、同じ結果が得られる可能性があります。ただし、ステートメントがより複雑で実行に時間がかかる場合は、使用する関数によって戻り値にかなりの差が生じる可能性があります。
例
使用する関数に応じて、戻り値がどのように変化するかを示す例を次に示します。
SELECT SYSDATE(), SLEEP(10) AS '', SYSDATE(), NOW(), SLEEP(10) AS '', NOW();
結果:
+---------------------+---+---------------------+---------------------+---+---------------------+ | SYSDATE() | | SYSDATE() | NOW() | | NOW() | +---------------------+---+---------------------+---------------------+---+---------------------+ | 2018-06-23 11:55:26 | 0 | 2018-06-23 11:55:36 | 2018-06-23 11:55:26 | 0 | 2018-06-23 11:55:26 | +---------------------+---+---------------------+---------------------+---+---------------------+
したがって、この例では、SYSDATE()
を実行します。 2回ですが、その間に10秒の休止があります。次に、NOW()
で同じことを行います 。
予想どおり、10秒間の一時停止は、2番目のSYSDATE()
の戻り値に影響します。 ただし、2番目のNOW()
。実際、NOW()
の両方のインスタンスの値 SYSDATE()
の最初のインスタンスと同じです 、ステートメントの実行が開始されたときです。
SYSDATE()をNOW()のエイリアスにする
これら2つの関数の違いが問題を引き起こしている場合は、実際にSYSDATE()
を作成するオプションがあります。 NOW()
のエイリアス 。
これを行うには、--sysdate-is-now
を使用します サーバーコマンドオプション。詳細については、MySQLドキュメントWebサイトの–sysdate-is-nowを参照してください。