如何将 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 与您的问题相似。
我在遗留数据库中将每周指标的日期存储为字符串,格式如下:
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 与您的问题相似。