如何在str_to_date中使用%U for MySQL

时间:2016-02-18 16:56:27

标签: mysql str-to-date

我将遗留数据库中每周度量标准的日期存储为具有以下格式的字符串:

2010 10%Y %U格式的工匠(即年后的周数)

所以我尝试通过STR_TO_DATE(time_week, '%Y %U')将其反转为日期时间列,但它似乎不理解周格式

当我对硬编码字符串进行测试时,它也不起作用

mysql> select str_to_date('2015 01', '%Y %U');
+---------------------------------+
| str_to_date('2015 01', '%Y %U') |
+---------------------------------+
| 2015-00-00                      |
+---------------------------------+


mysql> select str_to_date('2015 20', '%Y %U');
+---------------------------------+
| str_to_date('2015 20', '%Y %U') |
+---------------------------------+
| 2015-00-00                      |
+---------------------------------+
我确实错过了房间里的大象,但我不能错过。看什么。

2 个答案:

答案 0 :(得分:1)

您无法使用格式"%X%V"year-week字符串转换为日期,因为如果一周跨越月边界,则年和周的组合不会唯一标识年份和月份。要将year-week转换为日期,您还应指定weekday

这是一个例子

select str_to_date('2015 20 Friday', '%X%V %W');

编辑:将'%Y %U'更改为'%X%V %W'

答案 1 :(得分:1)

在您的日期,错过的第一天,你应该在日期添加任何day。使用concat函数添加日

CONCAT('2015 01', ' Sunday');

在此之后你应该使用STR_TO_DATE()函数,日期格式应为'%X %V %W'以上日期(CONCAT()之后)

SELECT STR_TO_DATE(CONCAT('2015 01', ' Sunday'), '%X %V %W');

输出为2015-01-04

SELECT STR_TO_DATE(CONCAT('2015 20', ' Sunday'), '%X %V %W');

输出为2015-05-17

我希望这会对你有所帮助。 this发布类似于您的问题。