在mysql中,now()和sysdate()两个函数都可以返回当前时间,但是两者是有区别的。下面我们先来看一下mysql的官方解释:
NOW()
returns a constant time that indicates the time at which the statement began to execute.
This differs from the behavior for SYSDATE()
, which returns the exact time at which it executes.
now()函数返回语句开始执行的时间;而sysdate()返回函数执行到的时间。
下面给出四种情况来理解两个函数的不同。
mysql> select NOW(),SLEEP(5),NOW(); +---------------------+----------+---------------------+ | NOW() | SLEEP(5) | NOW() | +---------------------+----------+---------------------+ | 2015-09-24 10:19:44 | 0 | 2015-09-24 10:19:44 | +---------------------+----------+---------------------+
mysql> select SYSDATE(),SLEEP(5),SYSDATE(); +---------------------+----------+---------------------+ | SYSDATE() | SLEEP(5) | SYSDATE() | +---------------------+----------+---------------------+ | 2015-09-24 10:20:53 | 0 | 2015-09-24 10:20:58 | +---------------------+----------+---------------------+
mysql> select NOW(),SLEEP(5),SYSDATE(); +---------------------+----------+---------------------+ | NOW() | SLEEP(5) | SYSDATE() | +---------------------+----------+---------------------+ | 2015-09-24 10:21:30 | 0 | 2015-09-24 10:21:35 | +---------------------+----------+---------------------+
mysql> select SYSDATE(),SLEEP(5),NOW(); +---------------------+----------+---------------------+ | SYSDATE() | SLEEP(5) | NOW() | +---------------------+----------+---------------------+ | 2015-09-24 10:22:09 | 0 | 2015-09-24 10:22:09 | +---------------------+----------+---------------------+
第一条语句:因为now()返回SQL语句开始执行的时间,所以尽管休眠5秒,两次调用的结果一致。
第二条语句:sysdate()返回调用该函数时的时间,所以休眠5秒,两次调用结果相差5秒。
第三条语句:先执行now()返回语句开始执行的时间,然后休眠5秒,所以两次时间相差5秒。
第四条语句:先执行sysdate()返回调用的时间,这个时间就是sql语句开始执行的时间,所以两个时间一致。
原文:http://my.oschina.net/friendship/blog/510532