MySQL 计算两个日期之间的天数差
在 MySQL 中,有几种方法可以计算两个日期之间的天数差:
1. 使用 DATEDIFF() 函数(最简单的方法)
SELECT DATEDIFF('2023-12-31', '2023-11-15') AS days_diff;
-- 返回结果:46 (表示从11月15日到12月31日相差46天)
2. 使用 TIMESTAMPDIFF() 函数(更灵活)
SELECT TIMESTAMPDIFF(DAY, '2023-11-15', '2023-12-31') AS days_diff;
-- 返回结果:46
TIMESTAMPDIFF()还可以计算其他时间单位:
-- 计算小时差
SELECT TIMESTAMPDIFF(HOUR, '2023-11-15 08:00:00', '2023-11-16 10:30:00') AS hours_diff;
-- 计算分钟差
SELECT TIMESTAMPDIFF(MINUTE, start_time, end_time) FROM your_table;
3. UNIX时间戳相减法(精确到秒)
SELECT
(UNIX_TIMESTAMP('2023-12-31') - UNIX_TIMESTAMP('2023-11-15')) / (24 * 60 * 60)
AS days_diff;
4. DATE_SUB和DATEDIFF结合使用
SELECT DATEDIFF(DATE_ADD(start_date, INTERVAL days_to_add DAY), end_date)
FROM your_table;
实际表查询示例
假设有一个订单表orders,包含下单日期(order_date)和发货日期(ship_date):
SELECT
order_id,
order_date,
ship_date,
DATEDIFF(ship_date, order_date) AS processing_days
FROM orders;
NULL值处理
如果任一日期可能为NULL,可以使用IFNULL或COALESCE:
SELECT
DATEDIFF(
IFNULL(end_date, CURDATE()),
start_date
) AS days_diff
FROM projects;
注意:DATEDIFF()只计算日期部分的时间差,忽略时间部分。如果需要考虑时间部分,请使用TIMESTAMPDIFF()或UNIX时间戳方法。
内容由零声教学AI助手提供,问题来源于学员提问