我正在尝试解析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
答案 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';
或之后立即为您的用户提供的任何内容。