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