可以写一个udf并取一个值告诉它一周中的哪一天应该是1看起来像这样 (drawing on answer from John to use MOD instead of 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;
5 回答
使用
WEEKDAY()
而不是DAYOFWEEK()
,它从星期一开始 .如果需要从索引1开始,请使用或
WEEKDAY() + 1
.尝试使用WEEKDAY()功能 .
如何减去一个并改变星期日
当然,您必须为每个查询执行此操作 .
可以写一个udf并取一个值告诉它一周中的哪一天应该是1看起来像这样 (drawing on answer from John to use MOD instead of CASE) :
要在周二开始一周工作时调用此函数为您提供当前的星期值,您可以调用:
将它作为udf使用的好处是你也可以在结果集字段中调用它,如下所示:
您可以轻松使用MODE参数:
MySQL :: MySQL 5.5 Reference Manual :: 12.7 Date and Time Functions
如果省略mode参数,则使用default_week_format系统变量的值:
MySQL :: MySQL 5.1 Reference Manual :: 5.1.4 Server System Variables