MySQL str_to_date() 函数失败,年份从星期一开始

标签 mysql

在 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/

相关文章:

php - 匹配并查找数据库中数组中的所有值

mysql - 创建 MySQL 空间列 - 具有 lat long 的点数据类型,而不使用 Alter table

php - 密码/用户名无法使用 php/mysql

mysql - 无法设置 MySQL 触发器以插入到第二个表中

php - 将 mysql 结果集转换为要输入 HighCharts 的(名称,数据)对象

php - 在 MySQL 中使用 LIKE 与变量

php - 如何正确对 mysql 表进行分组/排序

mysql - 正则表达式获取特定字符串第一次和第二次出现之间的字符

php - Laravel createConnection 超时

php - PHP 脚本可以在没有客户端请求的情况下在服务器上定期运行吗?