Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > mysql日期相减

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

作者:木木子9999

在 MySQL 中,日期相减有几种不同的方法,具体取决于你想要得到的结果类型(天数差、时间差等),本文给大家介绍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日期相减内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文