目录前言1. DATEDIFF(expr1, expr2) 2. TIMEDIFF(expr1, expr2) 3. TIMESTAMPDIFF(unit, expr1, expr2)三者对比总结(记忆口诀)
常见误区总结前言这三个函数都是 MySQL 中常用的日期时间差值计算函数,但用途、参数和返回值完全不同。以下是详细对比和说明。
函数名称返回值类型功能描述支持的时间单位典型用途DATEDIFF INT(天数)
计算两个日期相差的天数(仅精确到天)
天(忽略时间部分)
计算两个日期之间相隔多少天TIMEDIFF TIME 类型计算两个时间/日期时间的差值,返回时:分:秒格式时、分、秒、微秒计算同一日内或跨天的小时级时间差TIMESTAMPDIFF INT(指定单位)
计算两个日期时间相差的完整单位数量(最灵活)
YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND, MICROSECOND 等精确计算任意单位的间隔数量1. DATEDIFF(expr1, expr2)语法:DATEDIFF(expr1, expr2)返回值:expr1 − expr2 的天数(整数)。时间部分被忽略。
计算规则:expr1 - expr2,正数表示 expr1 在 expr2 之后。
示例:SELECT DATEDIFF('2025-12-30', '2025-12-01'); -- 29 SELECT DATEDIFF('2025-12-01', '2025-12-30'); -- -29 SELECT DATEDIFF('2025-12-30 10:00:00', '2025-12-01 23:59:59'); -- 29(时间部分忽略)
适用场景:统计年龄(年份差需结合其他计算)、会员注册天数、订单间隔天数等。
2. TIMEDIFF(expr1, expr2)语法:TIMEDIFF(expr1, expr2)返回值:TIME 类型,格式为 ‘HHH:MM:SS’(可超过24小时,如 48:00:00,支持负值)。
限制:两个参数都必须是 TIME 或 DATETIME 类型。
结果范围:-838:59:59 到 838:59:59(约34天多)。
如果差值超出范围,返回 NULL。
示例:SELECT TIMEDIFF('2025-12-30 15:30:00', '2025-12-30 10:20:30'); -- '05:09:30'SELECT TIMEDIFF('10:20:30', '15:30:00'); -- '-05:09:30'SELECT TIMEDIFF('2025-12-31 12:00:00', '2025-12-30 10:00:00'); -- '26:00:00'适用场景:计算工作时长、打卡上下班时间差、会议持续时间等需要精确到秒的时间段。
3. TIMESTAMPDIFF(unit, expr1, expr2)语法:TIMESTAMPDIFF(unit, datetime_expr1, datetime_expr2)返回值:expr2 − expr1 的指定单位数量(整数)。
注意顺序:是 expr2 - expr1(与前两个函数顺序相反!)。
常用 unit 参数
(不区分大小写):
MICROSECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR示例:SELECT TIMESTAMPDIFF(DAY, '2025-12-01', '2025-12-30'); -- 29 SELECT TIMESTAMPDIFF(MONTH, '2025-10-15', '2025-12-20'); -- 2 SELECT TIMESTAMPDIFF(HOUR, '2025-12-30 10:00:00', '2025-12-31 15:30:00'); -- 29 SELECT TIMESTAMPDIFF(YEAR, '2020-01-01', '2025-12-30'); -- 5 SELECT TIMESTAMPDIFF(MINUTE, '10:00:00', '15:30:45'); -- 330适用场景:最常用!可以精确计算任意单位的时间差,如用户年龄(YEAR)、会员时长(MONTH)、响应时间(SECOND)等。
三者对比总结(记忆口诀)
需求推荐函数原因只想知道相差多少天DATEDIFF最简单,直接返回天数需要返回时:分:秒格式的时间差TIMEDIFF返回 TIME 类型,适合展示时长需要精确到任意单位(年/月/日/时/分/秒)
TIMESTAMPDIFF(首选)
最灵活,单位可自定义,推荐大多数场景使用常见误区
参数顺序不一致:
DATEDIFF 和 TIMEDIFF 是 expr1 - expr2 TIMESTAMPDIFF 是 expr2 - expr1(后减前)
DATEDIFF 忽略时间部分,而 TIMESTAMPDIFF(DAY, …) 会考虑完整时间。
计算年龄时不要直接用 DATEDIFF/365(闰年问题),推荐:TIMESTAMPDIFF(YEAR, birth_date, CURDATE()) -(DATE_FORMAT(CURDATE(), '%m%d') < DATE_FORMAT(birth_date, '%m%d'))掌握了这三个函数,你就能轻松处理 MySQL 中绝大部分日期时间差计算需求!
总结到此这篇关于MySQL中timediff、timestampdiff、datediff函数详细对比和说明的文章就介绍到这了,更多相关MySQL timediff、timestampdiff、datediff函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:MySQL的时间差函数TIMESTAMPDIFF、DATEDIFF的用法MySQL的时间差函数(TIMESTAMPDIFF、DATEDIFF)、日期转换计算函数(date_add、day、date_format、str_to_date) mysql中TIMESTAMPDIFF案例详解MySQL中的datediff()方法和timestampdiff()方法的应用示例小结Mysql TIMESTAMPDIFF函数示例详解Mysql中TIMESTAMPDIFF函数的语法与练习案例
