在 MySQL 5.7 中,下面的句子将年周 + 工作日格式的日期字符串(如 '201801 Monday'
)转换为使用 str_to_date() function 的日期。 .
当一年从星期一开始时,代码会失败(例如今年和 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'
尝试将yearweek设置为00而不是01,例如'201800 Monday'
会破坏查询,因此这不是解决方案。
更改 default_week_format 的值周一启动的系统变量无效:
SET default_week_format=3; -- Have tried with every other possible value
所以我没有找到办法获得今年的前 6 天。
最佳答案
使用小写 %x 和小写 %v。
即str_to_date('201801 Monday', '%x%v %W') AS 'Monday',
将为您提供 2018-01-01
点击此处了解更多Params
关于MySQL str_to_date() 函数失败,年份从星期一开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50465205/