Oracle中获取系统当前的时间,可以用sysdate、systimestamp等函数,在MySQL中,同样有类似的函数可以使用,碰巧看到eygle大神最近的文章,短短几行文字,就介绍了MySQL中获取系统当前时间的来龙去脉。
在 MySQL 中,获得系统当前时间可以使用now() 函数,这是最简单和应用最广的函数。
除此之外,current_timestamp(),localtime(),localtimestamp()都是now()函数的同义词,返回的结果相同:
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2019-09-05 12:28:16 |
+---------------------+
1 row in set (0.00 sec)
mysql> select current_timestamp(),localtime(),localtimestamp();
+---------------------+---------------------+---------------------+
| current_timestamp() | localtime() | localtimestamp() |
+---------------------+---------------------+---------------------+
| 2019-09-05 12:30:43 | 2019-09-05 12:30:43 | 2019-09-05 12:30:43 |
+---------------------+---------------------+---------------------+
1 row in set (0.00 sec)
配套的,实现同样效果的同义词还有
current_timestamp,localtime,localtimestamp:
mysql> select current_timestamp,localtime,localtimestamp;
+---------------------+---------------------+---------------------+
| current_timestamp | localtime | localtimestamp |
+---------------------+---------------------+---------------------+
| 2019-09-05 12:30:31 | 2019-09-05 12:30:31 | 2019-09-05 12:30:31 |
+---------------------+---------------------+---------------------+
1 row in set (0.00 sec)
now()函数在一个SQL执行的过程中,取得的是执行开始的时间,并且在执行过程中保持不变,与之相对的则是sysdate()函数,sysdate模拟Oracle数据库的实现,每次执行时,都调用时间函数获得时间,数值每次不同:
mysql> select now(),sysdate(),sleep(3),now(),sysdate() ;
+---------------------+---------------------+----------+---------------------+---------------------+
| now() | sysdate() | sleep(3) | now() | sysdate() |
+---------------------+---------------------+----------+---------------------+---------------------+
| 2019-09-05 13:34:47 | 2019-09-05 13:34:47 | 0 | 2019-09-05 13:34:47 | 2019-09-05 13:34:50 |
+---------------------+---------------------+----------+---------------------+---------------------+
1 row in set (3.00 sec)
在MySQL的源码中,可以看到这行注释,item_func_sysdate_local模拟了Oracle的行为,每次执行获取当前的真实时间-Real current time,而不是query_start()的时间:
00516 /*
参考:
http://mysql.localhost.net.ar/sources/doxygen/mysql-5.1/item__timefunc_8h-source.html
除了sysdate(),之外,curdate()和curtime()还能够直接将日期和时间拆分开来:
mysql> select curdate(),curtime();
+------------+-----------+
| curdate() | curtime() |
+------------+-----------+
| 2019-09-05 | 13:37:14 |
+------------+-----------+
1 row in set (0.00 sec)
最后,如果你觉得now()函数就够了,可以在MySQL启动时指定-sysdate-is-now,sysdate()就会被当成now()的一个同义词,按照同样的行为工作了。从中能体会到,MySQL的设计者确实经验丰富,一个小小的时间函数,就可以提供这么多种可选的用途,这些都是值得学习的。
标签:sysdate,函数,05,09,选择,2019,MySQL,now From: https://blog.51cto.com/u_13950417/6512433