Mysql STR_TO_DATE日期时间值不正确

时间:2013-11-26 14:17:56

标签: mysql datetime

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

select STR_TO_DATE('12-16-2010 01:48:28', '%c-%e-%Y %T')

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

但是当我尝试运行时:

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

我遇到了那些错误:

Incorrect datetime value: ''12-16-2010 01:48:28'' for function str_to_date

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

仔细查看错误消息:

Incorrect datetime value: ''12-16-2010 01:48:28''
                          ^^  2 single quotes  ^^

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

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 

通常,错误消息只有一组单引号。你的有一套双重设置,暗示你实际上有一组单引号存储在你的列数据中。

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

SET datetimefile = (SELECT STR_TO_DATE(REPLACE(datestring,"'",''), '%c-%e-%Y %T')) 

即使并非所有行都包含虚假引号,使用这样的REPLACE()仍然可以工作,因为如果'from_str'(第二个arg)没有发生,则replace会通过输入值不变。

答案 1 :(得分:1)

从PHP SQL请求更正:

LOAD DATA INFILE '.$filename."' INTO TABLE tablename (@var_DTime, `Product`, `Source`, `Cost`) SET `DTime` = str_to_date(@var_DTime,'%Y-%m-%dT%H:%i:%s')

不要使用:" " - 2010-12-31 01:48:28; - 不要工作

使用" T" - 2010-12-31T01:48:28; - 工作

答案 2 :(得分:-2)

... SET datetimefile = STR_TO_DATE(datestring, '%c-%e-%Y-%T')

请注意str_to_date调用周围缺少select。该选择没有表引用,因此查询失败并显示“unknown field datestring”。这个失败冒出来并杀死了整个查询。