MySQL日期查询:如何计算天数差异与提取天数
在MySQL中,查询日期相关的天数主要通过DATEDIFF()函数计算两个日期之间的天数差,或使用DAY()函数提取日期中的具体天数,这些函数能高效处理日常业务中的时间间隔计算、数据筛选等需求。

计算两个日期之间的天数差
使用DATEDIFF(date1, date2) 函数,返回date1减去date2的天数差。
SELECT DATEDIFF('2023-12-31', '2023-01-01') AS days_diff;
-- 结果:364(表示从1月1日到12月31日共364天)
注意:参数可以是日期或日期时间类型,但函数仅比较日期部分,忽略时间。
提取日期中的天数
使用DAY(date) 函数获取日期中的“日”部分(1-31)。
SELECT DAY('2023-05-15') AS day_of_month;
-- 结果:15
结合其他函数(如CURDATE())可动态查询:
SELECT DAY(CURDATE()) AS today_day; -- 获取当前日期的天数
常见应用场景
- 业务周期计算:
统计订单处理时长(如从创建到发货的天数):SELECT order_id, DATEDIFF(shipped_date, created_date) AS process_days FROM orders;
- 数据筛选:
查询本月所有订单:SELECT * FROM orders WHERE MONTH(order_date) = MONTH(CURDATE()) AND YEAR(order_date) = YEAR(CURDATE());
- 年龄或时长计算:
计算用户注册至今的天数:SELECT username, DATEDIFF(CURDATE(), register_date) AS registered_days FROM users;
扩展:时间戳与天数转换
若字段为时间戳(如UNIX_TIMESTAMP),可先转换为日期再计算:
SELECT DATEDIFF(FROM_UNIXTIME(timestamp_column), '2023-01-01') FROM logs;
注意事项
- 时区影响:确保日期数据存储时区与查询逻辑一致。
- 性能优化:对大量数据使用日期函数时,建议对日期字段建立索引,并避免在
WHERE子句中对字段进行函数包装(如WHERE DATEDIFF(date, '2023-01-01') > 10),可改为范围查询。 - NULL处理:若日期参数为
NULL,函数返回NULL,需结合IFNULL()处理。
通过灵活组合DATEDIFF()、DAY()等函数,MySQL能轻松应对多数基于天数的日期查询需求,提升数据处理的精确性与效率。
未经允许不得转载! 作者:HTML前端知识网,转载或复制请以超链接形式并注明出处HTML前端知识网。
原文地址:https://www.html4.cn/15184.html发布于:2026-09-06





