Подтвердить что ты не робот

Какой режим для MySQL WEEK() соответствует ISO 8601

Какой режим для MySQL WEEK() функция дает ISO 8601 неделя года? Аргумент 2 из WEEK() устанавливает режим в соответствии с этой диаграммой:

+--------------------------------------------------------------------+
| Mode | First day of week | Range | Week 1 is the first week ...    |
|------+-------------------+-------+---------------------------------|
| 0    | Sunday            | 0-53  | with a Sunday in this year      |
|------+-------------------+-------+---------------------------------|
| 1    | Monday            | 0-53  | with more than 3 days this year |
|------+-------------------+-------+---------------------------------|
| 2    | Sunday            | 1-53  | with a Sunday in this year      |
|------+-------------------+-------+---------------------------------|
| 3    | Monday            | 1-53  | with more than 3 days this year |
|------+-------------------+-------+---------------------------------|
| 4    | Sunday            | 0-53  | with more than 3 days this year |
|------+-------------------+-------+---------------------------------|
| 5    | Monday            | 0-53  | with a Monday in this year      |
|------+-------------------+-------+---------------------------------|
| 6    | Sunday            | 1-53  | with more than 3 days this year |
|------+-------------------+-------+---------------------------------|
| 7    | Monday            | 1-53  | with a Monday in this year      |
+--------------------------------------------------------------------+

Будет ли один из этих режимов давать ISO 8601 неделю года?

4b9b3361

Ответ 1

В нумерации по ИСО, понедельник - первый день недели, так что сам сужает его до одного из режимов с нечетным номером.

В Википедии:

Существуют взаимно эквивалентные описания недели 01:

  • неделя с первым годом в этом году (формальное определение ISO),
  • неделя с 4 января в ней,
  • первая неделя с большинством (четыре или более) ее дней в начале года и
  • неделя, начинающаяся с понедельника в период с 29 декабря по 4 января.

Третье из этих описаний соответствует "более трех дней в этом году" из таблицы выше, поэтому теперь мы сузили ее до 1 или 3.

Наконец, еще из Википедии (выделено мной):

Если 1 января находится в понедельник, вторник, среду или четверг, это на неделе 01. Если 1 января находится в пятницу, субботу или воскресенье, это на 52 или 53 неделе предыдущего года ( нет недели 00).

Следовательно, диапазон должен быть 1-53, а не 0-53. Это, в свою очередь, означает, что правильным режимом является режим 3.

Ответ 2

Я знаю, что этот вопрос старый, но он хорошо позиционируется SEO:) Поэтому, чтобы сделать ответ более полным - при отображении номера года и недели вы можете использовать это:

DATE_FORMAT(your_date_here, "%x-%v")

он произведет номер недели iso для "% v" (1-53) и правильный номер года для "% x".

Ответ 3

Для Франции вам нужно добавить файл /etc/mysql/my.cnf § [Mysqld]: default_week_format = 3

Примечание: не работает для YEARWEEK, нужен режим добавления = 3 SELECT YEARWEEK (CURDATE(), 3)

Наполеон против Франции, действующий в качестве модификатора, и, возможно, в силу того, default_week_format = 3 Cela permet à la fonction НЕДЕЛЯ de retourner les vraies numéros de semaines Française. Внимание для участия YEARWEEK il faut impérativement ajouter le mode à 3 SELECT YEARWEEK (CURDATE(), 3)