MySQL中判断周几的函数:WEEKDAY()与DAYOFWEEK()详解
在MySQL中,判断日期是周几的核心函数是WEEKDAY()和DAYOFWEEK(),两者都用于从日期中提取星期信息,但返回值的规则不同,对于日常开发中的日期处理需求,正确选择这两个函数能高效解决星期判断问题,下面将详细解析它们的用法、区别以及实际应用场景。
核心函数解析
WEEKDAY()函数
- 功能:返回日期的星期索引,其中周一为0,周日为6。
- 语法:
WEEKDAY(date) - 示例:
SELECT WEEKDAY('2023-10-01'); -- 返回6(表示周日)
DAYOFWEEK()函数
- 功能:返回日期的星期索引,其中周日为1,周六为7。
- 语法:
DAYOFWEEK(date) - 示例:
SELECT DAYOFWEEK('2023-10-01'); -- 返回1(表示周日)
关键区别与选择建议
| 函数 | 起始日 | 返回值范围 | 适用场景 |
|---|---|---|---|
WEEKDAY() |
周一(0) | 0~6 | 符合国际标准ISO周制(周一为一周开始) |
DAYOFWEEK() |
周日(1) | 1~7 | 符合欧美习惯(周日为一周开始) |
选择建议:

- 若业务逻辑以周一为每周第一天(如中国、欧洲标准),优先使用
WEEKDAY()。 - 若需与日历显示对齐(周日为第一天),或处理美国地区数据,使用
DAYOFWEEK()更直观。
扩展:获取星期名称的函数
MySQL还提供DAYNAME()函数,可直接返回英文星期名称:
SELECT DAYNAME('2023-10-01'); -- 返回'Sunday'
结合DATE_FORMAT()可自定义输出格式:
SELECT DATE_FORMAT('2023-10-01', '%W'); -- 返回完整星期名(Sunday)
SELECT DATE_FORMAT('2023-10-01', '%a'); -- 返回缩写星期名(Sun)
实际应用案例
筛选特定星期数据
-- 查询所有周四的记录(假设周四对应WEEKDAY()返回3) SELECT * FROM orders WHERE WEEKDAY(order_date) = 3;
统计每周工作日订单量
-- 统计周一至周五的订单数(WEEKDAY()返回值0~4) SELECT COUNT(*) FROM orders WHERE WEEKDAY(order_date) BETWEEN 0 AND 4;
动态生成星期报告
SELECT
DAYNAME(event_date) AS week_day,
COUNT(*) AS event_count
FROM events
GROUP BY week_day
ORDER BY DAYOFWEEK(event_date);
注意事项
- 日期格式有效性:函数参数需为合法日期值,否则返回
NULL。 - 时区影响:若数据库时区设置与业务逻辑不符,可能导致星期判断错误。
- 性能优化:对大量数据使用星期函数时,建议在查询字段上建立索引或使用计算列缓存结果。
掌握WEEKDAY()和DAYOFWEEK()的差异,能帮助开发者在MySQL中精准处理星期相关逻辑。根据业务地区的周起始习惯选择对应函数,并结合DAYNAME()等扩展功能,可大幅提升日期数据处理的效率和准确性,在实际应用中,建议通过注释明确函数选择依据,避免团队协作时的理解歧义。
未经允许不得转载! 作者:HTML前端知识网,转载或复制请以超链接形式并注明出处HTML前端知识网。
原文地址:https://www.html4.cn/10467.html发布于:2026-08-12





