专栏首页bisal的个人杂货铺MySQL时间函数的选择

MySQL时间函数的选择

版权声明:本文为博主原创文章,遵循 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()函数的同义词,返回的结果相同:

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • resource角色对quota表空间限额的影响

    前两天,看到论坛中有位兄弟说设置了用户对表空间的quota限额,但仍可以插入超过限额大小的数据量到表空间。

    bisal
  • 读书笔记-《基于Oracle的SQL优化》-第一章-1

    开始学习崔老师的《基于Oracle的SQL优化》,七百多页,虽然可能会比较痛苦,但想必是一个痛并快乐的过程,尽情享受了。。。

    bisal
  • 【每日一摩斯】-Troubleshooting: High CPU Utilization (164768.1) - 系列6

    如果问题是一个正运行的缓慢的查询SQL,那么就应该对该查询进行调优,避免它耗费过高的CPU资源。如果它做了许多的hash连接和全表扫描,那么就应该添加索引以提高...

    bisal
  • 2.移植3.4内核-支持烧写yaffs2,裁剪内核并制作补丁

    如上图,问题都是出在fs/yaffs2/下,很多error都讲述:调用的成员名,在struct mtd_info结构体里没有定义.

    张诺谦
  • Celery 快速入门

    在一个应用服务中,对于时效性要求没那么高的业务场景,我们没必要等到所有任务执行完才返回结果,例如用户注册场景中,保存了用户账号密码之后,就可以立即返回,后续的账...

    马哥Python
  • 爬虫架构|Celery+RabbitMQ快速入门(四)整合版本

    黄小怪
  • 23:二维数组回形遍历

    23:二维数组回形遍历 总时间限制: 1000ms 内存限制: 65536kB描述 给定一个row行col列的整数数组array,要求从array[0][0...

    attack
  • P1996 约瑟夫问题

    题目背景 约瑟夫是一个无聊的人!!! 题目描述 n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出...

    attack
  • javascript_data

    机器学习和大数据挖掘
  • 1512 转向游戏

    1512 转向游戏 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 白银 Silver 题目描述 Description 小明自认为...

    attack

扫码关注云+社区

领取腾讯云代金券