В MySQL 5.7 приведенное ниже предложение преобразуется из строки даты в формате yearweek + weekday, например '201801 Monday'
в дату с использованием функции str_to_date().
Код не работает, когда год начинается в понедельник (например, в этом году, а также 2007).
Выполнение этого кода должно указывать даты в диапазоне от 2018-01-01 до 2018-01-07, но кроме воскресенья все перемещается на следующую неделю.
SELECT
str_to_date('201801 Monday', '%X%V %W') AS 'Monday',
str_to_date('201801 Tuesday', '%X%V %W') AS 'Tuesday',
str_to_date('201801 Wednesday', '%X%V %W') AS 'Wednesday',
str_to_date('201801 Thursday', '%X%V %W') AS 'Thursday',
str_to_date('201801 Friday', '%X%V %W') AS 'Friday',
str_to_date('201801 Saturday', '%X%V %W') AS 'Saturday',
str_to_date('201801 Sunday', '%X%V %W') AS 'Sunday';
Выход:
Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
'2018-01-08', '2018-01-09', '2018-01-10', '2018-01-11', '2018-01-12', '2018-01-13', '2018-01-07'
Тот же код работает и для других, не запускающихся в понедельник, например, 2017:
SELECT
str_to_date('201701 Monday', '%X%V %W') AS 'Monday',
str_to_date('201701 Tuesday', '%X%V %W') AS 'Tuesday',
str_to_date('201701 Wednesday', '%X%V %W') AS 'Wednesday',
str_to_date('201701 Thursday', '%X%V %W') AS 'Thursday',
str_to_date('201701 Friday', '%X%V %W') AS 'Friday',
str_to_date('201701 Saturday', '%X%V %W') AS 'Saturday',
str_to_date('201701 Sunday', '%X%V %W') AS 'Sunday';
Выход:
Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
'2017-01-02', '2017-01-03', '2017-01-04', '2017-01-05', '2017-01-06', '2017-01-07', '2017-01-01'
Попытка установить год до 00 вместо 01, как '201800 Monday'
прерывает запрос, поэтому это не решение.
Изменение значения default_week_format system var для запуска в понедельник не влияет:
SET default_week_format=3; -- Have tried with every other possible value
Поэтому я не нашел способ получить первые 6 дней в году.