MySQL DAYOFWEEK() – 我的星期从星期一开始

我在MySQL中使用DAYOFWEEK()函数, 星期天返回1 。 但在我的国家, 星期一开始,而不是星期天 。 是否有机会像MySQL一样从MySQL获得dayofweek(1 – 星期一,2 – 星期二,…)?

使用WEEKDAY()而不是DAYOFWEEK() ,它从星期一开始。

如果您需要从索引1开始,请使用WEEKDAY() + 1

尝试使用WEEKDAY()函数。

返回date的工作日索引(0 =星期一,1 =星期二,… 6 =星期日)。

如何减去一个星期天

 IF(DAYOFWEEK() = 1, 7, DAYOFWEEK() - 1) 

当然,你必须为每个查询做到这一点。

可以写一个udf,并用一个值来告诉它星期哪一天应该是1 John的答案用MOD代替CASE)

 DROP FUNCTION IF EXISTS `reporting`.`udfDayOfWeek`; DELIMITER | CREATE FUNCTION `reporting`.`udfDayOfWeek` ( _date DATETIME, _firstDay TINYINT ) RETURNS tinyint(4) FUNCTION_BLOCK: BEGIN DECLARE _dayOfWeek, _offset TINYINT; SET _offset = 8 - _firstDay; SET _dayOfWeek = (DAYOFWEEK(_date) + _offset) MOD 7; IF _dayOfWeek = 0 THEN SET _dayOfWeek = 7; END IF; RETURN _dayOfWeek; END FUNCTION_BLOCK 

为了调用这个函数来给你当周星期二开始的星期值,你可以调用:

 SELECT udfDayOfWeek(NOW(), 3); 

把它作为udf是好事,你也可以在结果集字段上调用它:

 SELECT udfDayOfWeek(p.SignupDate, 3) AS SignupDayOfWeek, p.FirstName, p.LastName FROM Profile p; 

您可以轻松使用MODE参数:

MySQL :: MySQL 5.5参考手册:: 12.7date和时间函数

如果省略mode参数,则使用default_week_format系统variables的值:

MySQL :: MySQL 5.1参考手册:: 5.1.4服务器系统variables