it编程 > 数据库 > Mysql

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

6人参与 2025-06-13 Mysql

mysql 中日期相减的完整指南

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

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

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

特点:

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

-- 计算相差的天数
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

支持的单位:

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

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)

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

特点:

5. 获取日期部分并计算

-- 计算两个日期之间的小时差
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

实际应用示例

-- 计算订单处理时长(天)
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;

注意事项

-- 不好的写法(索引失效)
select * from orders where datediff(curdate(), order_date) > 30;
-- 好的写法(可以使用索引)
select * from orders where order_date < date_sub(curdate(), interval 30 day);

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

到此这篇关于mysql 中日期相减的完整指南的文章就介绍到这了,更多相关mysql日期相减内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

您想发表意见!!点此发布评论

推荐阅读

在 MySQL 中使用 Insert Into Select的示例操作

06-13

MySQL主从数据库搭建的实现

06-13

MySQL存储过程之循环遍历查询的结果集详解

06-12

canal实现mysql数据同步的详细过程

06-12

MySQL单条插入与批量插入实现方法及对比分析

06-12

MySQL分区表的具体使用

06-11

猜你喜欢

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

发表评论