6人参与 • 2025-06-13 • Mysql
在 mysql 中,日期相减有几种不同的方法,具体取决于你想要得到的结果类型(天数差、时间差等)。
select datediff('2023-05-15', '2023-05-10'); -- 返回 5(天数差)
特点:
-- 计算相差的天数 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
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中行为不一致,不推荐使用
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
-- 计算两个日期之间的小时差 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;
注意事项
timestampdiff
比datediff
更精确-- 不好的写法(索引失效) select * from orders where datediff(curdate(), order_date) > 30; -- 好的写法(可以使用索引) select * from orders where order_date < date_sub(curdate(), interval 30 day);
掌握这些日期计算方法,可以高效处理各种与时间相关的数据分析和查询需求。
到此这篇关于mysql 中日期相减的完整指南的文章就介绍到这了,更多相关mysql日期相减内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论