我已经从文件到表格加载了一些日期,现在我想将日期字符串转换为日期时间格式。 字符串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
有什么想法吗?
答案 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”。这个失败冒出来并杀死了整个查询。