欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 20.日期函数

20.日期函数

2025/6/19 8:57:53 来源:https://blog.csdn.net/weixin_65866298/article/details/148749661  浏览:    关键词:20.日期函数

以下是对这些 MySQL 日期时间函数的分类总结,包含功能说明与示例,方便理解:

一、获取当前时间类

函数

功能

示例(执行时需结合实际时间)

CURRENT_DATE()
CURRENT_DATE(无括号写法,效果相同 )

获取当前系统日期,格式如 YYYY-MM-DD

SELECT CURRENT_DATE();2025-06-15

CURRENT_TIME()
CURRENT_TIME(无括号写法,效果相同 )

获取当前系统时间,格式如 HH:MM:SS

SELECT CURRENT_TIME();10:30:15(假设当前时间)

CURRENT_TIMESTAMP()
CURRENT_TIMESTAMP(无括号写法,效果相同 )
NOW()(常用简写,功能一致 )

获取当前系统时间戳(日期 + 时间),格式如 YYYY-MM-DD HH:MM:SS

SELECT CURRENT_TIMESTAMP();
SELECT NOW(); → 都返回 2025-06-15 10:30:15(假设当前时间)

二、日期时间提取与转换类

函数

功能

示例

DATE(datetime)

从** datetime 类型数据里提取日期部分**,舍弃时间

若字段 create_time2025-06-15 14:20:00
SELECT DATE(create_time);2025-06-15

YEAR(datetime)
MONTH(datetime)
DAY(datetime)(同理还有 HOURMINUTESECOND 等 )

从 datetime 或日期数据里提取年、月、日(时、分、秒)单独部分

SELECT YEAR('2025-06-15 14:20:00')2025
SELECT MONTH('2025-06-15 14:20:00')6

FROM_UNIXTIME(unix_timestamp)

Unix 时间戳(整数,单位秒)转换为 MySQL 日期时间格式

若时间戳是 1744406400(对应 2025-06-15 00:00:00 ),
SELECT FROM_UNIXTIME(1744406400);2025-06-15 00:00:00

三、日期时间计算类

函数

功能

示例

DATE_ADD(date2, INTERVAL d_value d_type)

给日期 date2 增加指定时间间隔d_type 可选 YEARMONTHDAYHOUR

2025-06-15 加 3 天:
SELECT DATE_ADD('2025-06-15', INTERVAL 3 DAY);2025-06-18

DATE_SUB(date2, INTERVAL d_value d_type)

从日期 date2 减去指定时间间隔,用法同 DATE_ADD,方向相反

2025-06-15 减 2 个月:
SELECT DATE_SUB('2025-06-15', INTERVAL 2 MONTH);2025-04-15

四、日期时间差值计算类

函数

功能

示例

DATEDIFF(date1, date2)

计算两个日期的天数差,结果 = date1 - date2 的天数(只算日期部分,忽略时间 )

SELECT DATEDIFF('2025-06-20', '2025-06-15');5

TIMEDIFF(date1, date2)

计算两个时间的差值,返回格式 HH:MM:SS,要求 date1date2 是 datetime 或 time 类型且需同类型

SELECT TIMEDIFF('14:30:00', '10:15:00');04:15:00
若用 datetime:SELECT TIMEDIFF('2025-06-15 14:30:00', '2025-06-15 10:15:00'); → 同样 04:15:00

这些函数覆盖了日期时间的获取、提取、计算、差值统计等常见操作,做报表统计(比如按天/月汇总)、业务逻辑(比如订单超时计算 )时经常会用到,用的时候注意参数格式和函数适用场景就行~

五、示例

(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;

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com