MySQL计算时间戳是周几的方法详解
在MySQL中,可以使用DAYOFWEEK()函数或WEEKDAY()函数来计算时间戳对应的星期几。 这两个函数都能将日期或时间戳转换为星期信息,但返回值的表示方式略有不同,适用于不同的场景需求。
核心函数介绍
DAYOFWEEK()函数
该函数返回日期对应的星期索引,遵循西方习惯,其中1代表星期日,2代表星期一,依此类推,7代表星期六。

SELECT DAYOFWEEK('2023-10-01'); -- 返回1(星期日)
WEEKDAY()函数
该函数同样返回星期索引,但遵循国际标准,其中0代表星期一,1代表星期二,依此类推,6代表星期日。
SELECT WEEKDAY('2023-10-01'); -- 返回6(星期日)
实际应用示例
假设我们有一个包含时间戳字段created_at的表orders,需要查询每个订单创建时间是星期几:
-- 使用DAYOFWEEK()
SELECT
created_at,
DAYOFWEEK(created_at) AS day_of_week,
CASE DAYOFWEEK(created_at)
WHEN 1 THEN '星期日'
WHEN 2 THEN '星期一'
WHEN 3 THEN '星期二'
WHEN 4 THEN '星期三'
WHEN 5 THEN '星期四'
WHEN 6 THEN '星期五'
WHEN 7 THEN '星期六'
END AS week_day_name
FROM orders;
-- 使用WEEKDAY()
SELECT
created_at,
WEEKDAY(created_at) AS weekday_index,
CASE WEEKDAY(created_at)
WHEN 0 THEN '星期一'
WHEN 1 THEN '星期二'
WHEN 2 THEN '星期三'
WHEN 3 THEN '星期四'
WHEN 4 THEN '星期五'
WHEN 5 THEN '星期六'
WHEN 6 THEN '星期日'
END AS week_day_name
FROM orders;
其他相关函数
-
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'(缩写名称)
使用建议
-
根据业务需求选择函数:如果业务逻辑遵循西方星期习惯,使用
DAYOFWEEK();如果需要符合国际标准,则选择WEEKDAY() -
考虑性能因素:在大型数据集上,直接使用索引列进行日期计算可能影响性能,建议在应用层进行预处理或使用生成列
-
注意时区问题:如果数据库存储的是UTC时间戳,计算星期几时需要先转换为本地时间
SELECT DAYOFWEEK(CONVERT_TZ(created_at, '+00:00', '+08:00')) FROM orders;
MySQL提供了多种计算时间戳对应星期几的方法,DAYOFWEEK()和WEEKDAY()是最常用的两个函数,区别主要在于返回值的起始定义不同,在实际开发中,可以根据具体业务需求选择合适的函数,并结合CASE语句或DATE_FORMAT()函数使结果更加直观易懂,掌握这些时间处理技巧,能够有效提升数据库查询的灵活性和数据分析的准确性。
未经允许不得转载! 作者:HTML前端知识网,转载或复制请以超链接形式并注明出处HTML前端知识网。
原文地址:https://www.html4.cn/10581.html发布于:2026-08-13





