我试图将XML文件导入MySQL表。在XML文件中,< CurrentTime>中有一个时间戳。采用以下格式:
2016-01-26T09:52:19.3420655 + 01:00
这个timstamp应该进入我表中相应的DATETIME CurrentTime列。所以我做了以下
LOAD XML INFILE 'xxx.xml'
INTO TABLE test.events
ROWS IDENTIFIED BY '<Event>'
SET CurrentTime = str_to_date(CurrentTime, '%Y-%m-%dT%H:%i:%s.%f');
但是它退出了错误
错误代码:1292。日期时间值不正确:&#39; 2016-01-25T16:22:24.1840792 + 01:00&#39;对于列&#39; CurrentTime&#39;在第1行
所以它似乎根本没有转换字符串。为什么呢?
答案 0 :(得分:1)
我认为当文件中的字符串值直接加载到列时会引发错误。在到达SET子句之前,会抛出错误。
这是一个简短的示例,说明如何使用用户定义的变量将字段的值传递给SET
,从而绕过对列的赋值。< / p>
请注意,列_row
和account_number
直接填充在文件的前两个字段中。文件中的后面的字段将分配给用户定义的变量(标识符以@
开头。
SET
子句计算用户定义的变量,并将表达式的结果分配给表中的实际列。
在这个例子中,&#34;日期&#34;格式为YYYYMMDD。我使用STR_TO_DATE()
函数将该字符串转换为正确的DATE
。
我略微缩略了这个样本,但它演示了将字段值读入用户定义变量的方法。
CREATE TABLE _import_water
(`_row` INT
,`account_number` VARCHAR(255)
,`total_due` DECIMAL(18,2)
,`end_date` DATE
,`start_date` DATE
,`ccf` DECIMAL(18,4)
)
LOAD DATA LOCAL INFILE '//server/share$/users/me/mydir/myfile.csv'
INTO TABLE _import_water
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(_row
,account_number
,@total_due
,@end_date
,@start_date
,@ccf
)
SET `total_due` = NULLIF(@total_due,'')
, `end_date` = STR_TO_DATE(@end_date,'%Y%m%d')
, `start_date` = STR_TO_DATE(@start_date,'%Y%m%d')
, `ccf` = NULLIF(@ccf,'')
此外,您的STR_TO_DATE
似乎没有任何问题,似乎评估得很好。
...测试
SELECT STR_TO_DATE('2016-01-25T16:22:24.1840792+01:00','%Y-%m-%dT%H:%i:%s.%f') AS mydatetime
返回:
mydatetime
--------------------------
2016-01-25 16:22:24.184079