MySQL STR_TO_DATE日期时间值不正确

Mar*_*rgo 5 mysql datetime

我已经从文件到表中加载了一些日期,现在我想将带日期的字符串转换为日期时间格式。我的字符串“ datestring”列看起来像这样“ 12-16-2010 01:48:28”,如果我运行此查询:

select STR_TO_DATE('12-16-2010 01:48:28', '%c-%e-%Y %T')
Run Code Online (Sandbox Code Playgroud)

它返回正确的日期时间: 2010-12-16 01:48:28

但是当我尝试运行此:

update database.`temptable` 
SET datetimefile = (SELECT STR_TO_DATE(datestring, '%c-%e-%Y %T'))
Run Code Online (Sandbox Code Playgroud)

我得到那些错误:

Incorrect datetime value: ''12-16-2010 01:48:28'' for function str_to_date
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Mic*_*bot 4

仔细看看错误信息:

Incorrect datetime value: ''12-16-2010 01:48:28''
                          ^^  2 single quotes  ^^
Run Code Online (Sandbox Code Playgroud)

将其与正常的错误消息进行比较:

mysql> SELECT STR_TO_DATE('foo', '%c-%e-%Y %T');
+-----------------------------------+
| STR_TO_DATE('foo', '%c-%e-%Y %T') |
+-----------------------------------+
| NULL                              |
+-----------------------------------+
1 row in set, 1 warning (0.00 sec)

mysql> show warnings;
+---------+------+----------------------------------------------------------+
| Level   | Code | Message                                                  |
+---------+------+----------------------------------------------------------+
| Warning | 1411 | Incorrect datetime value: 'foo' for function str_to_date |
+---------+------+----------------------------------------------------------+
1 row in set (0.00 sec)                      ^   ^ just 1 single quote 
Run Code Online (Sandbox Code Playgroud)

通常,错误消息具有一组单引号。您的有一个双引号,表明您实际上在列数据中存储了一组单引号。

如果是这种情况,您可以通过删除它们存在的位置来解决此问题:

SET datetimefile = (SELECT STR_TO_DATE(REPLACE(datestring,"'",''), '%c-%e-%Y %T')) 
Run Code Online (Sandbox Code Playgroud)

REPLACE()即使并非所有行都包含虚假引号,这样使用仍然可以工作,因为如果不出现“from_str”(第二个参数),则替换会不变地传递输入值。