当前位置: 代码网 > it编程>数据库>Mysql > MySQL中的timediff、timestampdiff、datediff函数详细对比和说明

MySQL中的timediff、timestampdiff、datediff函数详细对比和说明

2026年01月15日 Mysql 我要评论
前言这三个函数都是 mysql 中常用的日期时间差值计算函数,但用途、参数和返回值完全不同。以下是详细对比和说明。函数名称返回值类型功能描述支持的时间单位典型用途datediffint(天数)计算两个

前言

这三个函数都是 mysql 中常用的日期时间差值计算函数,但用途、参数和返回值完全不同。以下是详细对比和说明。

函数名称返回值类型功能描述支持的时间单位典型用途
datediffint(天数)计算两个日期相差的天数(仅精确到天)天(忽略时间部分)计算两个日期之间相隔多少天
timedifftime 类型计算两个时间/日期时间的差值,返回时:分:秒格式时、分、秒、微秒计算同一日内或跨天的小时级时间差
timestampdiffint(指定单位)计算两个日期时间相差的完整单位数量(最灵活)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(首选)最灵活,单位可自定义,推荐大多数场景使用

常见误区

  1. 参数顺序不一致:
    • datediff 和 timediff 是 expr1 - expr2
    • timestampdiff 是 expr2 - expr1(后减前)
  2. datediff 忽略时间部分,而 timestampdiff(day, …) 会考虑完整时间。
  3. 计算年龄时不要直接用 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函数内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com