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

Ignore characters in date string when using str_to_date

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

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

Monday 25th August 2014

Saturday 1st November 2014

我的查询如下:

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

由于日期字符串中的其他字符,此操作失败。所以我将我的格式字符串调整为 '%W %eth %M %Y' 并且正如预期的那样,这仅适用于其中包含 'th' 的日期。我无法锻炼如何排除日期中可能出现的 'st' 和 'nd' 的字符。

此方法有效但不理想。诀窍是用“1th”、“2th”和“3th”替换“1st”、“2nd”、“3rd”,让 str_to_date 发挥它的魔力。

首先创建一个 FUNCTION 来清除上述问题,然后执行到 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