MySQL中如何根据日期查询星期几
在MySQL中,可以使用DAYNAME()函数或DATE_FORMAT()函数根据日期查询对应的星期几。 这两种方法都能快速将日期数据转换为星期名称,适用于日常的数据查询、报表生成或业务逻辑处理场景,下面将详细介绍具体用法、实际示例以及相关注意事项。
核心函数介绍
DAYNAME()函数
DAYNAME()函数直接返回日期对应的星期名称(Monday、Tuesday),语法简单,适用于需要直观英文星期名称的场景。

SELECT DAYNAME('2023-10-01'); -- 返回 'Sunday'
DATE_FORMAT()函数
DATE_FORMAT()函数通过格式化符号%W返回星期名称,或使用%w返回数字形式的星期几(0代表周日,6代表周六),此函数灵活性更高,支持自定义输出格式。
-- 返回英文星期名称
SELECT DATE_FORMAT('2023-10-01', '%W'); -- 返回 'Sunday'
-- 返回数字星期(0-6)
SELECT DATE_FORMAT('2023-10-01', '%w'); -- 返回 '0'
实际应用示例
示例1:查询订单表中的下单星期分布
假设有订单表orders,包含字段order_date(日期类型),统计每周各天的订单数量:
SELECT
DAYNAME(order_date) AS week_day,
COUNT(*) AS order_count
FROM orders
GROUP BY DAYNAME(order_date)
ORDER BY order_count DESC;
示例2:筛选特定星期几的数据
查找所有周四生成的用户报告:
SELECT * FROM user_reports WHERE DATE_FORMAT(report_date, '%W') = 'Thursday'; -- 或使用数字格式 WHERE DATE_FORMAT(report_date, '%w') = '4';
示例3:中文化星期输出
若需返回中文星期,可结合CASE语句:
SELECT
report_date,
CASE DATE_FORMAT(report_date, '%w')
WHEN '0' THEN '周日'
WHEN '1' THEN '周一'
-- ... 其他星期
ELSE '周六'
END AS chinese_weekday
FROM reports;
注意事项
- 时区影响:日期函数结果可能受MySQL系统时区设置影响,在处理跨时区数据时需确保时区统一。
- 性能优化:对大量数据使用日期函数时,建议在查询字段上建立索引或使用生成列(Generated Columns)存储星期信息,以提升查询效率。
- 语言设置:
DAYNAME()和DATE_FORMAT()的输出语言取决于MySQL的lc_time_names系统变量,可通过以下命令临时修改:SET lc_time_names = 'zh_CN'; -- 设置为中文环境
扩展应用
结合其他日期函数(如WEEKDAY()返回数字星期0-6,其中0代表周一)可实现更复杂的逻辑,例如计算工作日差异、生成周报等,统计工作日内订单总量:
SELECT COUNT(*) FROM orders WHERE WEEKDAY(order_date) BETWEEN 0 AND 4; -- 周一至周五
通过DAYNAME()或DATE_FORMAT()函数,MySQL可以轻松实现日期到星期几的转换,根据实际需求选择合适函数,并注意时区、性能及语言设置等细节,能有效提升数据查询与分析效率。
未经允许不得转载! 作者:HTML前端知识网,转载或复制请以超链接形式并注明出处HTML前端知识网。
原文地址:https://www.html4.cn/10762.html发布于:2026-08-14





