Mysql 使用str_to_date时忽略日期字符串中的字符

Mysql 使用str_to_date时忽略日期字符串中的字符,mysql,str-to-date,Mysql,Str To Date,我从一个XML文件导入数据,其中日期字段存储为文本。通常在mysql中很容易转换,但是问题是日期包含存储为1st、2nd、3rd、4th等的%e元素。。因此,不可能应用标准的一致格式字符串 date字段中的数据示例如下: SELECT STR_TO_DATE(`date`, '%W %e %M %Y') as 'new_date' FROM `temp_match`; 2014年8月25日星期一 2014年11月1日星期六 我的质询如下: SELECT STR_TO_DATE(`date`,

我从一个XML文件导入数据,其中日期字段存储为文本。通常在mysql中很容易转换,但是问题是日期包含存储为1st、2nd、3rd、4th等的
%e
元素。。因此,不可能应用标准的一致格式字符串

date
字段中的数据示例如下:

SELECT STR_TO_DATE(`date`, '%W %e %M %Y') as 'new_date' FROM `temp_match`;
2014年8月25日星期一

2014年11月1日星期六

我的质询如下:

SELECT STR_TO_DATE(`date`, '%W %e %M %Y') as 'new_date' FROM `temp_match`;

由于日期字符串中的附加字符,此操作失败。因此,我将格式字符串调整为
“%W%eth%M%Y”
,正如所料,这只适用于其中包含“th”的日期。我无法确定如何排除日期中可能出现的“st”和“nd”字符。

此方法可行,但并不理想。诀窍是用“第1”、“第2”、“第3”替换为“第1”、“第2”和“第3”,以便
stru to_date
发挥其魔力

首先创建一个函数,该函数将清除上述问题,然后执行到
DATE

BEGIN
    DECLARE new_date DATE;
    SET old_date = REPLACE(old_date, "1st", "1th");
    SET old_date = REPLACE(old_date, "2nd", "2th");
    SET old_date = REPLACE(old_date, "3rd", "3th");
    SET new_date = STR_TO_DATE(`old_date`, '%W %eth%M %Y');
    RETURN new_date;
END