Какой режим для 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?

4 ответа

Решение

При нумерации недели по ISO понедельник - это первый день недели, поэтому он сам по себе сужает его до одного из нечетных режимов.

В Википедии:

Есть взаимно эквивалентные описания недели 01:

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

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

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

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

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

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

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

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

Ответ для ISO 8601 — режим 3:

      SELECT week(your_date_column, 3) FROM your_table

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

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

Вы можете изменить модификатор или указать, что вы пишете [Mysqld] du fichier /etc/mysql/my.cnf: default_week_format = 3 Соглашение о недельном возвращении в мир Франции. Внимание в течение года ГОДОВОЙ ФУНКЦИОНАЛЬНОЙ ПРОГРАММОЙ ВРЕМЕНИ à 3 ВЫБЕРИТЕ ГОД (КУРДАТА (), 3)

Другие вопросы по тегам