Я использую функцию DAYOFWEEK() в MySQL, которая возвращает 1 для sunday. Но в моей стране неделя начинается с понедельника, а не в воскресенье. Есть ли шанс получить dayofweek из MySQL, сформированного как: (1 - понедельник, 2 - вторник,...)?
MySQL DAYOFWEEK() - моя неделя начинается с понедельника
Ответ 1
Используйте WEEKDAY()
вместо DAYOFWEEK()
, он начинается в понедельник.
Если вам нужно начать с индекса 1, используйте или WEEKDAY() + 1
.
Ответ 2
Попробуйте использовать функцию WEEKDAY()
.
Возвращает индекс недели дня (0 = понедельник, 1 = вторник,... 6 = Воскресенье).
Ответ 3
Как насчет вычитания одного и изменения воскресенья
IF(DAYOFWEEK() = 1, 7, DAYOFWEEK() - 1)
Конечно, вам нужно будет сделать это для каждого запроса.
Ответ 4
Может написать 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;
Ответ 5
Вы можете легко использовать аргумент MODE:
MySQL:: Справочное руководство MySQL 5.5:: 12.7 Функции даты и времени
Если аргумент mode опущен, используется системная переменная default_week_format:
MySQL:: Справочное руководство MySQL 5.1:: 5.1.4 Системные переменные сервера