在将XML值插入MySQL表

时间:2016-01-28 14:12:18

标签: mysql xml

我试图将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行

所以它似乎根本没有转换字符串。为什么呢?

1 个答案:

答案 0 :(得分:1)

我认为当文件中的字符串值直接加载到列时会引发错误。在到达SET子句之前,会抛出错误。

这是一个简短的示例,说明如何使用用户定义的变量将字段的值传递给SET,从而绕过对列的赋值。< / p>

请注意,列_rowaccount_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