#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 всегда такой же, как и на данной неделе года.