如何将STR_TO_DATE的字符串'YEARWEEK'转换为正确的日期?

时间:2017-01-20 19:13:05

标签: mysql date-format sql-date-functions

我正在尝试将201701等值转换为2017-01-01这是2017年第一周的第一天,我试过这个

SELECT STR_TO_DATE('201701', '%Y%v')

因为DATE_FORMAT(DATE, '%Y%v')的工作方式与YEARWEEK()类似,但我没有获得相应周的第一天

2017-00-00

当然不是有效的日期。

2 个答案:

答案 0 :(得分:0)

试试这个:

SELECT 
    DATE_ADD(MAKEDATE(LEFT(d, 4), 1),
        INTERVAL RIGHT(d, 2) - 1 WEEK)
FROM
    (SELECT '201701' d) t

MAKEDATE()生成一年中的某一天(在这种情况下为第1天)。并为它添加周数抵消以获得一周的开始。

答案 1 :(得分:0)

如果您以某种方式将“星期一”添加到脚本下方,我会得到您要查找的内容(指定周的第一天的日期)。

SELECT STR_TO_DATE('201701 Monday',
'%X%V %W')
--returns: 2017-01-02

PS:2017-1-1(星期日)是2016年第52周.2017-1-2(星期一)是2017年第1周。周从星期一开始。