我正在尝试解析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';
或者之后立即对您的用户来说是正确的。