MySQL yearweek () против недели (), возвращая другой результат - PullRequest
0 голосов
/ 03 января 2019

Этот простой запрос, похоже, не выводит правильные результаты. Учитывая, что режим одинаков (1) для всех функций, не должно ли «неделя (« 2018-12-31 », 1)» показывать значение 1, а не 53?

SELECT yearweek("2018-12-31", 1), yearweek("2019-01-02", 1),
week("2018-12-31", 1), week("2019-01-02", 1)    

, который выдает следующее.

'201901','201901','53','1'

Есть ли по умолчанию разработчик, который мне нужно где-то установить?

Ответы [ 2 ]

0 голосов
/ 03 января 2019

week () в режиме 1: Первый день недели - понедельник, а первая неделя года имеет более 3 дней.

Таким образом, 2018 год начался с недели 1, а не снеделя 0 (потому что неделя с 1 января 2018 года имела более трех дней 2018 года).Следовательно, 31-12-2018 подпадает под 53-ю неделю.

Аналогично, 2019 год начинается с 1-й недели с 01-01-2019 по 06-01-2019 и 2-й недели с 07-01-2019 по 13-01-2019 (поскольку понедельник - первый день недели, а неделя с 1 января имеет 6 дней 2019)

0 голосов
/ 03 января 2019

Посмотрите на этот пример из WEEK описания функции:

mysql> SELECT YEAR('2000-01-01'), WEEK('2000-01-01',0);
        -> 2000, 0

Можно утверждать, что WEEK() должен вернуть 52, потому что данная дата действительно происходитна 52-й неделе 1999 года. WEEK() вместо этого возвращает 0, так что возвращаемое значение равно «номеру недели в данном году».

Вышеуказанное предполагает, что все режимы, имеющие 0Диапазон -53 вернет номер недели относительно года ввода даты (он вернет 0, если дата попадает в последнюю неделю предыдущего года).

Так что, если первый день года = понедельник ипервая неделя года = 4 или более дней в этом году, затем 2018-12-31 относится к 53-й неделе 2018 года и 1-й неделе 2019 года, а параметр mode определяет возвращаемое значение:

SELECT WEEK('2018-12-31', 1); -- 53
SELECT WEEK('2018-12-31', 3); -- 1

YEARWEEK функция однозначна (результат включает год), поэтому вышеприведенное не применимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...