MySQL中查询星期几的函数详解
MySQL中查询星期几的核心函数是DAYOFWEEK()和WEEKDAY(),两者都能返回日期对应的星期信息,但在具体使用和返回值上有所区别,掌握这些函数能帮助开发者高效处理时间相关的数据查询与分析。
主要函数对比与用法
DAYOFWEEK() 函数
- 功能:返回日期对应的星期索引,范围从1到7
- 返回值规则:
- 1 = 星期日
- 2 = 星期一
- 3 = 星期二
- 4 = 星期三
- 5 = 星期四
- 6 = 星期五
- 7 = 星期六
SELECT DAYOFWEEK('2023-10-01'); -- 返回 1(星期日)
SELECT DAYOFWEEK(NOW()); -- 返回当前日期的星期索引
WEEKDAY() 函数
- 功能:返回日期对应的星期索引,范围从0到6
- 返回值规则:
- 0 = 星期一
- 1 = 星期二
- 2 = 星期三
- 3 = 星期四
- 4 = 星期五
- 5 = 星期六
- 6 = 星期日
SELECT WEEKDAY('2023-10-01'); -- 返回 6(星期日)
辅助函数与扩展应用
DAYNAME() 函数
直接返回星期的英文名称,更直观:

SELECT DAYNAME('2023-10-01'); -- 返回 'Sunday'
SELECT DAYNAME(NOW()); -- 返回当前星期的英文名
DATE_FORMAT() 函数
通过格式化输出星期信息,灵活性最强:
-- 返回英文全称
SELECT DATE_FORMAT('2023-10-01', '%W'); -- 'Sunday'
-- 返回英文缩写
SELECT DATE_FORMAT('2023-10-01', '%a'); -- 'Sun'
-- 返回数字(0=周日,1-6=周一到周六)
SELECT DATE_FORMAT('2023-10-01', '%w'); -- '0'
实际应用场景示例
查询特定星期几的数据
-- 查找所有在星期一创建的订单 SELECT * FROM orders WHERE DAYOFWEEK(created_at) = 2; -- 使用WEEKDAY()实现相同功能 SELECT * FROM orders WHERE WEEKDAY(created_at) = 0;
按星期分组统计
-- 统计每周各天的订单数量
SELECT
DAYNAME(order_date) as week_day,
COUNT(*) as order_count
FROM orders
GROUP BY DAYNAME(order_date)
ORDER BY DAYOFWEEK(order_date);
中文本地化输出
-- 使用CASE语句返回中文星期
SELECT
order_date,
CASE DAYOFWEEK(order_date)
WHEN 1 THEN '星期日'
WHEN 2 THEN '星期一'
WHEN 3 THEN '星期二'
WHEN 4 THEN '星期三'
WHEN 5 THEN '星期四'
WHEN 6 THEN '星期五'
WHEN 7 THEN '星期六'
END as chinese_weekday
FROM orders;
性能优化建议
- 索引使用:在经常按星期查询的日期字段上创建索引
- 函数前置:避免在WHERE条件中对字段使用函数,可考虑使用范围查询
- 存储冗余字段:高频查询时可考虑将星期信息作为冗余字段存储
注意事项
- 时区影响:日期函数的结果受MySQL时区设置影响
- NULL处理:输入NULL值时,所有函数都返回NULL
- 日期格式:确保输入为合法日期格式,否则可能返回错误或NULL
MySQL提供了DAYOFWEEK()、WEEKDAY()、DAYNAME()和DATE_FORMAT()等多种查询星期几的函数,开发者应根据具体需求选择最合适的函数,对于需要数字索引的场景,注意两者返回值的差异;对于需要直观显示的场景,DAYNAME()和DATE_FORMAT()更加方便,在实际应用中,结合适当的索引和查询优化,可以显著提升时间相关查询的性能效率。
未经允许不得转载! 作者:HTML前端知识网,转载或复制请以超链接形式并注明出处HTML前端知识网。
原文地址:https://www.html4.cn/8065.html发布于:2026-07-31





