以下是对这些 MySQL 日期时间函数的分类总结,包含功能说明与示例,方便理解:
一、获取当前时间类
函数 | 功能 | 示例(执行时需结合实际时间) |
| 获取当前系统日期,格式如 |
|
| 获取当前系统时间,格式如 |
|
| 获取当前系统时间戳(日期 + 时间),格式如 |
|
二、日期时间提取与转换类
函数 | 功能 | 示例 |
| 从** datetime 类型数据里提取日期部分**,舍弃时间 | 若字段 |
| 从 datetime 或日期数据里提取年、月、日(时、分、秒)单独部分 |
|
| 把Unix 时间戳(整数,单位秒)转换为 MySQL 日期时间格式 | 若时间戳是 |
三、日期时间计算类
函数 | 功能 | 示例 |
| 给日期 | 给 |
| 从日期 | 给 |
四、日期时间差值计算类
函数 | 功能 | 示例 |
| 计算两个日期的天数差,结果 = |
|
| 计算两个时间的差值,返回格式 |
|
这些函数覆盖了日期时间的获取、提取、计算、差值统计等常见操作,做报表统计(比如按天/月汇总)、业务逻辑(比如订单超时计算 )时经常会用到,用的时候注意参数格式和函数适用场景就行~
五、示例
(1)创建一个测试用表
-- 创建日期时间测试表
CREATE TABLE date_test (id INT PRIMARY KEY AUTO_INCREMENT,-- 存完整的日期时间,方便测试提取、计算datetime_col DATETIME, -- 存日期,测试纯日期相关函数date_col DATE, -- 存时间,测试纯时间相关函数time_col TIME
);INSERT INTO date_test (datetime_col, date_col, time_col)
VALUES
-- 常规日期时间
('2025-06-15 09:30:00', '2025-06-15', '09:30:00'),
-- 含特殊月份(2月)、日期(28日)
('2025-02-28 14:15:00', '2025-02-28', '14:15:00'),
-- 跨月日期(6月转7月)
('2025-06-30 23:59:59', '2025-06-30', '23:59:59'),
-- 带年份变化(2025→2026)
('2025-12-31 20:00:00', '2025-12-31', '20:00:00'),
-- 空值,测试函数处理空的情况
(NULL, NULL, NULL);
(2)获取当前时间类函数
验证这几个函数获取当前系统日期、时间、时间戳的效果,执行多次看结果是否随系统时间变化。
SELECT CURRENT_DATE() AS current_date,CURRENT_TIME() AS current_time,CURRENT_TIMESTAMP() AS current_timestamp,NOW() AS now;
(3)日期时间提取类函数
看如何从 DATETIME
类型里拆分出年、月、日、时、分、秒,理解提取逻辑。
SELECT datetime_col,-- 提取日期部分DATE(datetime_col) AS date_part, -- 提取年份YEAR(datetime_col) AS year_part, -- 提取月份MONTH(datetime_col) AS month_part, -- 提取日期(天)DAY(datetime_col) AS day_part, -- 提取小时HOUR(datetime_col) AS hour_part, -- 提取分钟MINUTE(datetime_col) AS minute_part, -- 提取秒SECOND(datetime_col) AS second_part
FROM date_test;
(4)日期时间计算(增减)函数
观察日期时间 “加 / 减” 后结果,比如跨月、跨年时是否自动处理(如 6 月 30 日加 1 天变 7 月 1 日 )。
SELECT datetime_col,-- 加 3 天DATE_ADD(datetime_col, INTERVAL 3 DAY) AS add_3_days, -- 减 2 个月DATE_SUB(datetime_col, INTERVAL 2 MONTH) AS sub_2_months, -- 加 1 小时DATE_ADD(datetime_col, INTERVAL 1 HOUR) AS add_1_hour, -- 减 30 分钟DATE_SUB(datetime_col, INTERVAL 30 MINUTE) AS sub_30_minutes
FROM date_test;
(5)日期时间差值计算函数
理解 DATEDIFF
只算日期差(忽略时间)、TIMEDIFF
算具体时间差(格式 HH:MM:SS
)的区别。
SELECT datetime_col AS date1,-- 手动写一个对比日期'2025-06-20 12:00:00' AS date2, -- 算天数差DATEDIFF(datetime_col, '2025-06-20 12:00:00') AS date_diff, -- 算时间差TIMEDIFF(datetime_col, '2025-06-20 12:00:00') AS time_diff
FROM date_test;
(6)Unix 时间戳转换函数
验证 FROM_UNIXTIME
把时间戳转回日期时间的能力,常用来处理接口传参(接口多传时间戳)场景。
SELECT datetime_col,-- 先转成 Unix 时间戳(秒数)UNIX_TIMESTAMP(datetime_col) AS unix_ts, -- 再转回日期时间,看是否一致FROM_UNIXTIME(UNIX_TIMESTAMP(datetime_col)) AS from_unix_ts
FROM date_test;