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