使用 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
我正在从日期字段存储为文本的 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