MySQL DAYOFWEEK () - моя неделя начинается с понедельника - PullRequest
45 голосов
/ 30 июля 2009

Я использую DAYOFWEEK () функцию в MySQL, которая возвращает 1 для воскресенье . Но в моей стране неделя начинается с понедельник , а не воскресенье . Есть ли шанс получить dayofweek из MySQL, например: (1 - понедельник, 2 - вторник, ...)?

Ответы [ 5 ]

106 голосов
/ 30 июля 2009

Используйте WEEKDAY() вместо DAYOFWEEK(), это начинается в понедельник.

Если вам нужно начать с индекса 1, используйте или WEEKDAY() + 1.

17 голосов
/ 18 августа 2009

Попробуйте использовать функцию WEEKDAY().

Возвращает индекс дня недели для даты (0 = понедельник, 1 = вторник,… 6 = Воскресенье).

7 голосов
/ 30 июля 2009

Как насчет вычитания одного и изменения воскресенья

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

Конечно, вам придется делать это для каждого запроса.

1 голос
/ 23 мая 2013

Вы можете легко использовать аргумент MODE:

MySQL :: MySQL 5.5 Справочное руководство :: 12.7 Функции даты и времени

Если аргумент mode пропущен, используется значение системной переменной default_week_format:

MySQL :: Справочное руководство по MySQL 5.1 :: 5.1.4 Системные переменные сервера

1 голос
/ 30 июля 2009

Может написать udf и принять значение, чтобы сказать, какой день недели должен быть 1, будет выглядеть так: (опираясь на ответ Джона, чтобы использовать 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...