我已经从文件到表中加载了一些日期,现在我想将带日期的字符串转换为日期时间格式。我的字符串“ 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)
有任何想法吗?
仔细看看错误信息:
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”(第二个参数),则替换会不变地传递输入值。