0

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

4

3 回答 3

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 不在乎并且不会在日期转换期间应用任何更改。

于 2013-02-14T10:52:14.980 回答
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”视为通配符。在每种情况下,时区都固定为三个字符。

于 2018-11-29T10:38:02.647 回答
-1

%a 和 %b 处理的日期和月份的名称由您的服务器连接的区域设置控制。我从您的姓名和时区猜测您有一些用户的母语不是'en_US'“Tue”和“Feb”的默认语言。

给出这个命令来查看你的语言环境设置:

  SELECT @@lc_time_names;

您可以尝试发行

 SET lc_time_names = 'en_US';

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

 SET lc_time_names = 'ru_RU';

或者之后立即对您的用户正确的任何内容。

于 2013-02-13T16:51:10.390 回答