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



我正在尝试解析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

我认为它只适用于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不会在意,也不会在日期转换期间应用任何更改。

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"视为通配符。在每种情况下,时区都固定为三个字符。

由%a和%b处理的日期和月份的名称由服务器连接的区域设置控制。根据你的姓名和时区,我猜你有一些用户的母语不是默认的'en_US',语言是"周二"one_answers"二月"

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

  SELECT @@lc_time_names;

您可以尝试发布

 SET lc_time_names = 'en_US';

在发出问题中失败的命令之前,立即发出

 SET lc_time_names = 'ru_RU';

或者之后立即对您的用户来说是正确的。

相关内容

  • 没有找到相关文章