如何忽略MySQL STR_TO_DATE格式字符串中的文本?

时间:2013-02-13 16:23:17

标签: mysql parsing datetime

我正在尝试解析MySQL表中的一些日期,我无法让STR_TO_DATE很好地发挥作用:

SELECT STR_TO_DATE('Tue Feb 12 17:59:59 EET 2013', '%a %b %e %T EET %Y')

将返回null。

如何让它忽略 EET 文字?我不需要时区信息。

更新: MySQL服务器版本为4.1.14

3 个答案:

答案 0 :(得分:3)

我认为它仅适用于5.x(在5.5.x上试过),因为解析器可以在字符串中跳过匹配的模板而在4.x中没有实现。

您可以尝试以下语句,它在5.x中可以正常但不是4.x:

SELECT STR_TO_DATE('Tue XX Feb 12 17:59:59 SOME_DATA 2013', '%a XX %b %e %T SOME_DATA %Y')

因此,您可以做的最好的事情就是遵循您的解决方法(替换不需要的子字符串)。

旁注:MySQL没有时区概念。因此,如果初始字符串包含UTC, EET, FET等,则MySQL不关心并且不会在日期转换期间应用任何更改。

答案 1 :(得分:0)

SELECT STR_TO_DATE(CONCAT(LEFT('Wed Nov 28 20:41:25 GMT 2018',19), RIGHT('Wed Nov 28 20:41:25 GMT 2018',5)), '%a %b %d %H:%i:%s %Y');

这将很好地工作并将'GMT'视为通配符。在每种情况下,时区都固定为三个字符。

答案 2 :(得分:-1)

%a和%b处理的天数和月份的名称由服务器连接的区域设置决定。我猜你的名字和时区,你有一些用户的母语不是'en_US',默认和语言是“星期二”和“二月”。

使用此命令查看您的区域设置:

  SELECT @@lc_time_names;

您可以尝试发布

 SET lc_time_names = 'en_US';

在您的问题中发出命令失败之前,然后发出

 SET lc_time_names = 'ru_RU';

或之后立即为您的用户提供的任何内容。