MySQL str_to_date () не работает с годами, начиная с понедельника

0

В 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 дней в году.

Теги:

1 ответ

2
Лучший ответ

используйте нижний регистр% x и нижний регистр% v.

т.е. str_to_date('201801 Monday', '%x%v %W') AS 'Monday', даст вам 2018-01-01

Нажмите здесь, чтобы узнать больше Params

Ещё вопросы

Сообщество Overcoder
Наверх
Меню