如何将 str_to_date 中的 %U 用于 MySQL

How to use %U in str_to_date for MySQL

我在遗留数据库中将每周指标的日期存储为字符串,格式如下:

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                      |
+---------------------------------+

我当然想念房间里的大象,但我看不到什么。

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

这是一个例子

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

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

在你的日期中,缺少一天所以你应该在日期中添加任何 day。使用 concat 函数添加 day

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 post 与您的问题相似。