读完本文,您将掌握MySQL的各类时间函数。
附录提供了格式标识、时间间隔两个速查表,便于日常工作中快速查找。
本文会持续更新、补充,建议您收藏。
更多MySQL函数介绍,可查看《MySQL函数和运算符》
MySQL提供了比较多的、灵活的时间函数,而且基本稳定、已经多个版本不曾修改过了1。
文章目录
获取当前时间
获取当前时间很简单,常用的有CURDATE()
/CURTIME()
/NOW()
三个函数。
下面表格说明了其功能和区别:
功能 | 推荐函数 | 同义函数 | 小数位 | 效果 |
---|---|---|---|---|
获取当前日期 | CURDATE() |
CURRENT_DATE CURRENT_DATE() UTC时间参考时区与UTC时间 |
不支持 | 默认YYYY-MM-DD 若上下文有数字则返回 YYYYMMDD |
获取当前时间 | CURTIME() |
CURRENT_TIME CURRENT_TIME() UTC时间参考时区与UTC时间 |
默认无 可传参指定至多6位 如 CURTIME(3) 表示精确到毫秒 |
默认hh:mm:ss 若上下文有数字则返回 hhmmss |
获取当前日期+时间 | NOW() |
CURRENT_TIMESTAMP CURRENT_TIMESTAMP() LOCALTIME LOCALTIME() LOCALTIMESTAMP LOCALTIMESTAMP() UTC时间参考时区与UTC时间 |
默认无 可传参指定至多6位 如 NOW(3) 表示精确到毫秒 |
默认YYYY-MM-DD hh:mm:ss 若上下文有数字则返回 YYYYMMDDhhmmss |
上下文有数字,指的是函数前后有数字运算,如我现在执行的
CURDATE() + 0
返回了20191023
如果对“现在”的定义精确一点:上述函数取的都是SQL开始执行的时间,只是输出格式有所变化。而在存储过程或触发器中,返回的是存储过程或触发器开始执行的时间。
除了上面的函数,MySQL还提供了更细致的“现在”定义:SYSDATE()
函数,每一行/每个列数据准备时才获取时间,如下面样例所示:
mysql> SELECT CURDATE(), CURTIME(6), NOW(6), SYSDATE(6) AS 'SYS1', SLEEP(2), SYSDATE(6) AS 'SYS2' FROM sales limit 5;
+------------+-----------------+----------------------------+----------------------------+----------+----------------------------+
| CURDATE() | CURTIME(6) | NOW(6) | SYS1 | SLEEP(2) | SYS2 |
+------------+-----------------+----------------------------+----------------------------+----------+----------------------------+
| 2019-10-23 | 23:40:29.086893 | 2019-10-23 23:40:29.086893 | 2019-10-23 23:40:29.092738 | 0 | 2019-10-23 23:40:31.092824 |
| 2019-10-23 | 23:40:29.086893 | 2019-10-23 23:40:29.086893 | 2019-10-23 23:40:31.092868 | 0 | 2019-10-23 23:40:33.098602 |
| 2019-10-23 | 23:40:29.086893 | 2019-10-23 23:40:29.086893 | 2019-10-23 23:40:33.098663 | 0 | 2019-10-23 23:40:35.098779 |
| 2019-10-23 | 23:40:29.086893 | 2019-10-23 23:40:29.0868