我正在尝试解析 MySQL 表中的一些日期,但我无法让 STR_TO_DATE 正常播放:
SELECT STR_TO_DATE('Tue Feb 12 17:59:59 EET 2013', '%a %b %e %T EET %Y')
将返回空值。
我怎样才能让它忽略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'
“Tue”和“Feb”的默认语言。
给出这个命令来查看你的语言环境设置:
SELECT @@lc_time_names;
您可以尝试发行
SET lc_time_names = 'en_US';
在您的问题中发出失败的命令之前,然后发出
SET lc_time_names = 'ru_RU';
或者之后立即对您的用户正确的任何内容。