Как получить последнюю неделю через YEARWEEK в MySQL?

#mysql

#mysql

Вопрос:

Какой синтаксис в MySQL 5.7 для выбора yearweek перед заданной неделей?

Я знаю, что это работает с date(), но у меня сохранен yearweek, и мне нужно получить данные, например, за неделю до этого?

Пример:

 select 202101 - interval 1 week
 

Ожидается:

 202053
 

Ответ №1:

Сначала вы должны преобразовать '202101' в дату (на Sunday этой неделе) с STR_TO_DATE помощью, вычтите 1 неделю, а затем получите неделю:

 SELECT YEARWEEK(STR_TO_DATE(CONCAT('202101',' Sunday'), '%X%V %W') - INTERVAL 1 week, 6) AS week;
 

Посмотрите демонстрацию.
Результат:

 week
-----
202053
 

Комментарии:

1. Спасибо вам за вашу помощь. Для меня это, кажется, работает только для этого примера, но это не работает, например, для 202053, а также, по крайней мере, сбой запуска dbfiddle на 5.7

2. @merlin проблема с номерами недель — это начальный день недели. Я использовал воскресенье, вот почему я поставил 6 в качестве 2-го аргумента YEARWEEK(). Если я удалю 6, то начальным днем считается понедельник, и результат будет 202052 202053 таким, какого вы не ожидаете: dbfiddle.uk /…

3. Я понимаю, но я считаю, что здесь что-то еще не так. Я пробовал также другие недели года в прошлом, и результат на mysql 5.7 всегда такой же, как и на данной неделе года.