MySQL的WEEKDAY函数是用来获取指定日期对应的星期索引的内置日期函数,它的返回值是基于周一开始计数的整数,在很多按周统计、周维度数据处理的场景中会频繁用到。

WEEKDAY函数的基本语法
WEEKDAY函数的语法非常简单,只需要传入一个合法的日期或者日期时间类型的参数即可,语法格式如下:
WEEKDAY(date)
其中date参数可以是DATE类型、DATETIME类型的值,也可以是符合MySQL日期格式的字符串,比如2024-05-20、20240520123000这类格式都支持。
WEEKDAY的返回值规则
WEEKDAY函数的返回值范围是0到6,对应的星期规则是从周一开始计数:
- 返回0:对应星期一
- 返回1:对应星期二
- 返回2:对应星期三
- 返回3:对应星期四
- 返回4:对应星期五
- 返回5:对应星期六
- 返回6:对应星期日
这里要注意和DAYOFWEEK函数做区分,DAYOFWEEK是从周日开始计数,返回1对应星期日,2对应星期一,以此类推,两者的计数起点不同。
WEEKDAY使用示例
示例1:查询指定日期的星期索引
我们可以直接传入日期字符串调用函数,查看对应日期的星期索引:
-- 查询2024-05-20是星期几,返回值为0代表星期一
SELECT WEEKDAY('2024-05-20') AS week_index;
示例2:处理表中日期字段
假设我们有一张订单表order_info,里面有order_id和create_time字段,我们需要查询所有在周三创建的订单:
-- 周三对应的WEEKDAY返回值是2 SELECT order_id, create_time FROM order_info WHERE WEEKDAY(create_time) = 2;
示例3:按周统计订单数量
如果需要统计每周的订单总量,我们可以结合WEEKDAY和日期的周数函数一起使用:
-- 按年和周分组,统计每周的订单数
SELECT
YEAR(create_time) AS order_year,
WEEK(create_time) AS order_week,
COUNT(*) AS order_count
FROM order_info
GROUP BY order_year, order_week;
使用注意事项
- 如果传入的
date参数不是合法的日期格式,WEEKDAY函数会返回NULL,调用前最好确认参数的合法性。 - 如果参数包含时间部分,函数只会取日期部分进行计算,时间部分不会影响结果。
- 不同MySQL版本的WEEKDAY函数行为一致,不需要担心版本兼容问题。
注意:WEEKDAY函数的计数规则和很多编程语言的星期索引规则不同,比如Java的
Calendar类默认周日是第一天,使用时需要先确认计数规则再对应返回值。
MySQLWEEKDAY日期函数weekday_index修改时间:2026-06-29 03:39:21