返回顶部
分享到

MySQL中日期相减的完整指南(最新推荐)

Mysql 来源:互联网 作者:佚名 发布时间:2025-06-14 18:14:51 人浏览
摘要

MySQL 中日期相减的完整指南 在 MySQL 中,日期相减有几种不同的方法,具体取决于你想要得到的结果类型(天数差、时间差等)。 1. 使用 DATEDIFF() 函数(返回天数差) 1 SELECT DATEDIFF(2023-05-15,

MySQL 中日期相减的完整指南

在 MySQL 中,日期相减有几种不同的方法,具体取决于你想要得到的结果类型(天数差、时间差等)。

1. 使用 DATEDIFF() 函数(返回天数差)

1

SELECT DATEDIFF('2023-05-15', '2023-05-10'); -- 返回 5(天数差)

特点:

  • 计算两个日期之间的天数差
  • 第一个参数是结束日期,第二个是开始日期
  • 结果 = 结束日期 - 开始日期

2. 使用 TIMESTAMPDIFF() 函数(灵活的单位)

1

2

3

4

5

6

-- 计算相差的天数

SELECT TIMESTAMPDIFF(DAY, '2023-05-10', '2023-05-15'); -- 返回 5

-- 计算相差的月数

SELECT TIMESTAMPDIFF(MONTH, '2023-01-15', '2023-05-20'); -- 返回 4

-- 计算相差的年份

SELECT TIMESTAMPDIFF(YEAR, '2020-01-01', '2023-01-01'); -- 返回 3

支持的单位:

  • MICROSECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK
  • MONTH
  • QUARTER
  • YEAR

3. 使用减法运算符(返回时间间隔)

1

2

3

4

SELECT '2023-05-15 12:00:00' - '2023-05-10 10:30:00';

-- 返回 50230(格式为DDHHMM,不推荐)

-- 更安全的做法是转为日期时间对象再减

SELECT CAST('2023-05-15 12:00:00' AS DATETIME) - CAST('2023-05-10 10:30:00' AS DATETIME);

注意:直接减法在MySQL中行为不一致,不推荐使用

4. 计算时间差(TIMEDIFF)

1

2

SELECT TIMEDIFF('12:00:00', '10:30:00'); -- 返回 01:30:00

SELECT TIMEDIFF('2023-05-15 12:00:00', '2023-05-15 10:30:00'); -- 返回 01:30:00

特点:

  • 专门计算时间部分差值
  • 返回格式为 HH:MM:SS

5. 获取日期部分并计算

1

2

3

4

-- 计算两个日期之间的小时差

SELECT TIMESTAMPDIFF(HOUR, '2023-05-10 08:00', '2023-05-10 17:30'); -- 返回 9

-- 计算精确到分钟

SELECT TIMESTAMPDIFF(MINUTE, '2023-05-10 08:00', '2023-05-10 17:30'); -- 返回 570

实际应用示例

1

2

3

4

5

6

7

8

9

-- 计算订单处理时长(天)

SELECT order_id, DATEDIFF(shipped_date, order_date) AS processing_days

FROM orders;

-- 计算员工年龄(精确到年)

SELECT employee_name, TIMESTAMPDIFF(YEAR, birth_date, CURDATE()) AS age

FROM employees;

-- 计算服务时长(精确到小时)

SELECT service_id, TIMESTAMPDIFF(HOUR, start_time, end_time) AS duration_hours

FROM services;

注意事项

  • 日期格式必须正确(推荐使用’YYYY-MM-DD’格式)
  • 处理NULL值时结果会为NULL
  • 对于大日期范围,TIMESTAMPDIFF比DATEDIFF更精确
  • 时区差异会影响包含时间的计算

1

2

3

4

-- 不好的写法(索引失效)

SELECT * FROM orders WHERE DATEDIFF(CURDATE(), order_date) > 30;

-- 好的写法(可以使用索引)

SELECT * FROM orders WHERE order_date < DATE_SUB(CURDATE(), INTERVAL 30 DAY);

掌握这些日期计算方法,可以高效处理各种与时间相关的数据分析和查询需求。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • MySQL中日期相减的完整指南(最新推荐)
    MySQL 中日期相减的完整指南 在 MySQL 中,日期相减有几种不同的方法,具体取决于你想要得到的结果类型(天数差、时间差等)。 1. 使用
  • MySQL中的LIMIT语句及基本用法
    MySQL 中的 LIMIT 语句 LIMIT语句用于限制查询返回的行数,常用于分页查询或取部分数据,提高查询效率。 1. LIMIT 语法 1 2 3 4 5 SELECT 列名1, 列名
  • MySQL备份失败的问题:undo log清理耗时10小时的问题
    在数据库运维领域,备份失败是令人头疼的问题。本文将结合实际案例,剖析 MySQL 8.0.18 环境下,因 undo log 清理耗时过长导致全备失败的故
  • MySQL启动报错:InnoDB表空间丢失问题及解决方法
    MySQL启动报错:InnoDB表空间丢失问题及解决方法 在启动 MySQL时,遇到了如下错误: 1 2 3 2025-01-16T12:43:28.341240Z 0 [ERROR] InnoDB: Tablespace 5975 was
  • MySQL查看表的最后一个ID的常见方法
    在MySQL中,id字段通常被用作主键,尤其是自增主键(AUTO_INCREMENT)。自增主键的特性是每次插入新记录时,id值会自动递增。因此,最后一个
  • Mysql中的用户管理

    Mysql中的用户管理
    13. 用户管理 为什么不能只用 root:出于安全考虑,不应该所有操作都由 root 执行。 MySQL 的用户信息存储位置:mysql.user表。 13.1 用户 ???? 1
  • Redis迷你版微信抢红包

    Redis迷你版微信抢红包
    全部代码:https://github.com/ziyifast/ziyifast-code_instruction/tree/main/redis_demo/redpacket_demo 1 思路分析 抢红包是一个高并发操作,且我们需要保证其原
  • Python虚拟环境终极(含PyCharm的使用教程)

    Python虚拟环境终极(含PyCharm的使用教程)
    一、为什么需要虚拟环境? 场景 问题表现 虚拟环境解决方案 多项目依赖冲突 项目A需要Django 3.2,项目B需要Django 4.1 隔离不同项目的依赖版
  • Python中的魔术方法__new__介绍

    Python中的魔术方法__new__介绍
    一、核心意义与机制 1.1 构造过程原理 1.2 与 __init__ 对比 特性 __new__ __init__ 方法类型 静态方法 实例方法 返回值 必须返回实例对象 无返回值
  • 基于PyQt5实现的Windows定时关机工具

    基于PyQt5实现的Windows定时关机工具
    在日常使用电脑的过程中,我们经常会遇到需要定时关机的场景,比如: 夜间下载文件,想让电脑在任务完成后自动关机。 长时间运行的程
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计