MySQL 获取当前时间的完整指南
一、基础时间函数
-- 返回 '2024-01-15 14:30:45' 格式
SELECT NOW();
-- 返回 '2024-01-15 14:30:45' 格式
SELECT CURRENT_TIMESTAMP();
-- 返回 '2024-01-15 14:30:45' 格式
SELECT LOCALTIME();
-- 返回 '2024-01-15 14:30:45' 格式
SELECT LOCALTIMESTAMP();
-- 返回 '2024-01-15' 格式
SELECT CURDATE();
-- 返回 '2024-01-15' 格式
SELECT CURRENT_DATE();
-- 返回 '2024-01-15' 格式
SELECT CURRENT_DATE;
-- 返回 '14:30:45' 格式
SELECT CURTIME();
-- 返回 '14:30:45' 格式
SELECT CURRENT_TIME();
-- 返回 '14:30:45' 格式
SELECT CURRENT_TIME;
二、UNIX 时间戳函数
-- 返回当前 Unix 时间戳(秒级)
SELECT UNIX_TIMESTAMP();
-- 返回指定时间的 Unix 时间戳
SELECT UNIX_TIMESTAMP('2024-01-15 14:30:45');
-- 将 Unix 时间戳转为日期时间
SELECT FROM_UNIXTIME(1705303845);
-- 格式化输出
SELECT FROM_UNIXTIME(1705303845, '%Y-%m-%d %H:%i:%s');
三、系统级时间函数
-- 返回函数执行时的时间(每次调用可能不同)
SELECT SYSDATE();
-- 与 NOW() 对比
SELECT NOW(), SLEEP(2), NOW(), SYSDATE();
输出示例:
++-+++
| NOW() | SLEEP(2) | NOW() | SYSDATE() |
++-+++
| 2024-01-15 14:30:45 | 0 | 2024-01-15 14:30:45 | 2024-01-15 14:30:47 |
++-+++
-- 获取 UTC 日期时间
SELECT UTC_TIMESTAMP();
-- 获取 UTC 日期
SELECT UTC_DATE();
-- 获取 UTC 时间
SELECT UTC_TIME();
四、格式化输出
-- 标准格式
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');
-- 中文格式
SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日 %H时%i分%s秒');
-- 简洁格式
SELECT DATE_FORMAT(NOW(), '%Y%m%d%H%i%s');
-- 年-月-日
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d');
-- 月/日/年(美式)
SELECT DATE_FORMAT(NOW(), '%m/%d/%Y');
-- 日-月-年(欧式)
SELECT DATE_FORMAT(NOW(), '%d-%m-%Y');
-- 12小时制
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %h:%i:%s %p');
-- 24小时制
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');
五、实际应用场景
-- 创建表时设置默认时间
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
order_data VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- 插入数据
INSERT INTO orders (order_data) VALUES ('订单数据');
-- 查询今天的数据
SELECT * FROM logs WHERE DATE(created_time) = CURDATE();
-- 查询最近一小时的数据
SELECT * FROM logs WHERE created_time > NOW() - INTERVAL 1 HOUR;
-- 查询本周数据
SELECT * FROM logs WHERE YEARWEEK(created_time) = YEARWEEK(NOW());
-- 加减时间
SELECT
NOW() as 当前时间,
NOW() + INTERVAL 1 HOUR as 一小时后,
NOW() - INTERVAL 1 DAY as 一天前,
NOW() + INTERVAL 1 MONTH as 一月后;
-- 日期差计算
SELECT DATEDIFF('2024-01-20', CURDATE()) as 天数差;
六、性能优化技巧
-- 不推荐(无法使用索引)
SELECT * FROM orders WHERE DATE(created_time) = '2024-01-15';
-- 推荐(可以使用索引)
SELECT * FROM orders
WHERE created_time >= '2024-01-15 00:00:00'
AND created_time < '2024-01-16 00:00:00';
-- 在应用层计算时间范围
SET @start_time = '2024-01-15 00:00:00';
SET @end_time = '2024-01-16 00:00:00';
SELECT * FROM orders
WHERE created_time BETWEEN @start_time AND @end_time;
七、时区处理
-- 查看当前时区
SELECT @@global.time_zone, @@session.time_zone;
-- 设置会话时区
SET time_zone = '+08:00';
-- 查看当前时间(带时区)
SELECT NOW(), CONVERT_TZ(NOW(), '+00:00', '+08:00') as 北京时间;
-- 将 UTC 时间转为北京时间
SELECT
UTC_TIMESTAMP() as UTC时间,
CONVERT_TZ(UTC_TIMESTAMP(), '+00:00', '+08:00') as 北京时间;
-- 将时间转为其他时区
SELECT
NOW() as 当前时间,
CONVERT_TZ(NOW(), '+08:00', '+09:00') as 东京时间,
CONVERT_TZ(NOW(), '+08:00', '-05:00') as 纽约时间;
八、高级时间操作
-- 提取时间各部分
SELECT
NOW() as 完整时间,
YEAR(NOW()) as 年,
MONTH(NOW()) as 月,
DAY(NOW()) as 日,
HOUR(NOW()) as 时,
MINUTE(NOW()) as 分,
SECOND(NOW()) as 秒,
DAYNAME(NOW()) as 星期,
MONTHNAME(NOW()) as 月份名;
-- 时间比较
SELECT
NOW() as 当前时间,
'2024-01-20 00:00:00' as 目标时间,
TIMESTAMPDIFF(HOUR, NOW(), '2024-01-20 00:00:00') as 相差小时数,
TIMESTAMPDIFF(DAY, NOW(), '2024-01-20 00:00:00') as 相差天数;
九、常用函数速查表
| 需求场景 | 推荐函数 | 示例 | ||-|| | 获取当前完整时间 | NOW() | SELECT NOW(); | | 仅获取日期 | CURDATE() | SELECT CURDATE(); | | 仅获取时间 | CURTIME() | SELECT CURTIME(); | | 获取时间戳 | UNIX_TIMESTAMP() | SELECT UNIX_TIMESTAMP(); | | 时间格式化 | DATE_FORMAT() | SELECT DATE_FORMAT(NOW(), '%Y-%m-%d'); | | 时区转换 | CONVERT_TZ() | SELECT CONVERT_TZ(NOW(), '+00:00', '+08:00'); | | 时间计算 | INTERVAL | SELECT NOW() + INTERVAL 1 DAY; |
十、最佳实践总结
-- 使用 TIMESTAMP 类型(自动时区转换)
CREATE TABLE example (
id INT,
event_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 使用 DATETIME 类型(固定时间)
CREATE TABLE example2 (
id INT,
event_time DATETIME DEFAULT CURRENT_TIMESTAMP
);
Python 示例
import mysql.connector
from datetime import datetime
conn = mysql.connector.connect(...)
cursor = conn.cursor()
使用数据库当前时间
cursor.execute("INSERT INTO logs (message, created_at) VALUES (%s, NOW())",
("系统消息",))
或使用应用层时间
current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
cursor.execute("INSERT INTO logs (message, created_at) VALUES (%s, %s)",
("系统消息", current_time))
通过掌握这些 MySQL 时间函数,您可以高效地处理各种时间相关的业务需求,确保数据的准确性和系统的性能。 另外搭配便捷的80kmMYSQL备份工具,可定时备份、异地备份,MYSQL导出导入。可本地连接LINUX里的MYSQL,简单便捷。可以大大地提高工作效率喔。
企业级MySQL索引优化实战:高并发场景下的索引设计与调优
企业级MySQL时间管理实践:高并发场景下的性能优化与时区解决方案
【保姆级教程】MySQL主从复制最全配置指南,含监控脚本和故障处理
开发必备:MySQL 获取各类当前时间的最全指南
企业级MySQL管理工具选型指南:功能对比与最佳实践
运维工程师必备:MySQL版本信息标准化查询方法与最佳实践
企业级MySQL高效查询方案:字符串匹配性能优化与全文检索最佳实践
企业级MySQL索引优化实战:高并发场景下的索引设计与调优
【保姆级教程】MySQL主从复制最全配置指南,含监控脚本和故障处理
开发必备:MySQL 获取各类当前时间的最全指南
企业级MySQL管理工具选型指南:功能对比与最佳实践
运维工程师必备:MySQL版本信息标准化查询方法与最佳实践
企业级MySQL高效查询方案:字符串匹配性能优化与全文检索最佳实践
运维基础技能:Linux服务器MySQL版本信息核查的标准化流程
企业级Docker MySQL部署方案:生产环境配置、数据持久化与网络隔离实践
企业级MySQL权限审计指南:从基础查询到安全合规的最佳实践
企业级MySQL日期处理规范:高效格式化方法与性能优化最佳实践
如何学习mysql,具体的学习框架和建议
mysql可视化管理工具,一些常用选择