前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL时间函数的选择

MySQL时间函数的选择

作者头像
bisal
发布2019-10-22 15:31:15
2.2K0
发布2019-10-22 15:31:15
举报

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/bisal/article/details/102577613

Oracle中获取系统当前的时间,可以用sysdate、systimestamp等函数,在MySQL中,同样有类似的函数可以使用,碰巧看到eygle大神最近的文章,短短几行文字,就介绍了MySQL中获取系统当前时间的来龙去脉。

文章链接:

https://www.eygle.com/archives/2019/09/mysql_now_sysdate.html

在 MySQL 中,获得系统当前时间可以使用now() 函数,这是最简单和应用最广的函数。

除此之外,current_timestamp(),localtime(),localtimestamp()都是now()函数的同义词,返回的结果相同:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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数据库的实现,每次执行时,都调用时间函数获得时间,数值每次不同:

代码语言:javascript
复制
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()还能够直接将日期和时间拆分开来:

代码语言:javascript
复制
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的设计者确实经验丰富,一个小小的时间函数,就可以提供这么多种可选的用途,这些都是值得学习的。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档