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

 更新时间:2026年01月15日 09:57:13   作者:AI老李  
这篇文章主要介绍了MySQL中timediff、timestampdiff、datediff函数详细对比和说明的相关资料,通过示例代码详细对比了它们的用途、参数和返回值,并提供了示例和易记口诀帮助记忆,需要的朋友可以参考下

前言

这三个函数都是 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函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL运行状况查询方式介绍

    MySQL运行状况查询方式介绍

    直接在命令行下登陆MySQL运行SHOW STATUS;查询语句;同样的语句还有SHOW VARIABLES;,SHOW STATUS是查看MySQL运行情况,和上面那种通过pma查看到的信息基本类似
    2013-06-06
  • MySQL4 File ‘c:\mysql\share\charsets\?.conf’ not found (Errcode: 22)的解决方法

    MySQL4 File ‘c:\mysql\share\charsets\?.conf’ not found (Errc

    File ‘c:\mysql\share\charsets\?.conf’ not found (Errcode: 22) Character set ‘#33′ is not a compiled character set and is not specified in the ‘c:\mysql\share\charsets\Index’ file
    2013-08-08
  • MySQL 查看库中大表信息的几种方法

    MySQL 查看库中大表信息的几种方法

    本文主要介绍了MySQL 查看库中大表的几种方法,为了识别可能影响数据库性能的表,下面主要了4种方式,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04
  • Mysql报错Duplicate entry '值' for key '字段名'的解决方法

    Mysql报错Duplicate entry '值' for key '字段名&

    今天在使用数据库的过程中,发现一直报Duplicate entry '值' for key '字段名'的错误,所以下面这篇文章主要给大家介绍了关于Mysql报错Duplicate entry '值' for key '字段名'的解决方法,需要的朋友可以参考下
    2023-04-04
  • MySQL索引的5种应用

    MySQL索引的5种应用

    本文主要介绍了MySQL索引的5种应用,包含聚集索引,唯一索引,非唯一(普通)索引,全文索引,组合索引等,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • MySQL锁机制与用法分析

    MySQL锁机制与用法分析

    这篇文章主要介绍了MySQL锁机制与用法,较为详细的分析了mysql锁机制的分类、原理及相关使用技巧,需要的朋友可以参考下
    2018-04-04
  • mySQL中in查询与exists查询的区别小结

    mySQL中in查询与exists查询的区别小结

    最近被一个朋友问到mySQL中in查询和exists的区别,当然只是草草的回答了下,今天偶然看到了一篇关于mysql中的exists查询的文章,读完感觉太”冷落”它了,这里总结一下,也跟自己常用的in查询做一下对比。有需要的朋友们可以参考借鉴,下面来一起学习学习吧。
    2016-11-11
  • linux 安装 mysql 8.0.19 详细步骤及问题解决方法

    linux 安装 mysql 8.0.19 详细步骤及问题解决方法

    这篇文章主要介绍了linux 安装 mysql 8.0.19 详细步骤,本文给大家列出了常见问题及解决方法,通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • MySQL基本表查询操作汇总之单表查询+多表操作大全

    MySQL基本表查询操作汇总之单表查询+多表操作大全

    本文全面介绍了MySQL单表查询与多表操作的关键技术,包括基本语法、高级查询、表别名使用、多表连接及子查询等,并提供了丰富的实例,感兴趣的朋友跟随小编一起看看吧
    2025-11-11
  • MySQL排序原理和案例详析

    MySQL排序原理和案例详析

    这篇文章主要给大家介绍了关于MySQL排序原理和案例详析的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12

最新评论