首页 文章

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

提问于
浏览
44

我在MySQL中使用DAYOFWEEK()函数,为 sunday 返回 1 . 但在我的国家,这一周从星期一开始,而不是星期日 . 是否有任何机会从MySQL形成如下日期:(1 - 星期一,2 - 星期二,......)?

5 回答

  • 103

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

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

  • 7

    尝试使用WEEKDAY()功能 .

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

  • 1

    如何减去一个并改变星期日

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

    当然,您必须为每个查询执行此操作 .

  • 17

    可以写一个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;
    
  • 1

    您可以轻松使用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

相关问题