2017-05-20 22 views
0

我正在嘗試使用LOAD LOCAL INFILE將一個xml文件導入到MySQL中,並在執行該操作時轉換日期格式。 XML文件中,notacts.xml,看起來是這樣的(只有一個元素設置<ROW/>所示):如何在使用LOAD LOCAL INFILE時在MySQL中轉換日期?

<?xml version='1.0' ?> 
    <ROW> 
     <field name="ID">12779293</field> 
     <field name="AA_NUMBER">162</field> 
     <field name="CONTENT">some text</field> 
     <field name="DATE">30-12-1643</field> 
     <field name="FA_NUMBER">5115.1</field> 
     <field name="LAST_CHANGE_DATE">10-07-15</field> 
    </ROW> 

我的MySQL數據庫表「中扮演」包含使用XML的領域元素的屬性的名稱領域文件。當我使用這個SQL:

LOAD XML LOCAL INFILE 'notacts.xml' INTO TABLE acts 
ROWS IDENTIFIED BY '<ROW>' 
SET recordID=NULL 

一切都攝入很好,除了這兩個日期:數據庫字段「DATE」得到的值的所有條目:「0000-00-00」(中日範例是:1643年12月30日),數據庫字段「LAST_CHANGE_DATE」的值爲:2010-07-15(示例中的日期是2015年7月10日)。

當我嘗試通過添加這兩條線到SQL來解決這個問題:

SET DATE = STR_TO_DATE(@DATE, '%d-%m-%Y'), 
LAST_CHANGE_DATE = STR_TO_DATE(@LAST_CHANGE_DATE, '%d-%m-%y') 

我得到一個錯誤:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET DATE = STR_TO_DATE(@DATE,'%d-%m-%Y')' at line 4 

我的MySQL版本是5.6.16。

我覺得問題就在於,在兩條額外的線條我稱之爲'@DATE@LAST_CHANGE_DATE,而不是像這樣:@field name="DATE"@field name="LAST_CHANGE_DATE",但我不知道如何解決這個問題,所以任何建議應付與此將不勝感激。

回答

0

你需要做這樣的事情:

LOAD XML LOCAL INFILE 'notacts.xml' 
INTO TABLE acts 
ROWS IDENTIFIED BY '<ROW>' 
(column1, @DATE, column3, @LAST_CHANGE_DATE, ...) 
SET DATE = STR_TO_DATE(@DATE, '%d/%m/%Y'), 
LAST_CHANGE_DATE = STR_TO_DATE(@LAST_CHANGE_DATE, '%d/%m/%Y') 
+0

感謝您的建議,我試過了,但我仍然得到了同樣的錯誤消息... – Cannedit

+0

@Cannedit你創建的最終命令是什麼? – gaganshera

+0

感謝您的提示,儘管我一開始並沒有正確理解它:-) – Cannedit

0

考慮到我的表「行爲」也有場「的recordId」被設置爲INT(10)和AUTO_INCREMENT,我用:

LOAD XML LOCAL INFILE 'notacts.xml' INTO TABLE acts 
ROWS IDENTIFIED BY '<ROW>' 
(column1, column2, column3, column4, @DATE, column6, @LAST_CHANGE_DATE) 
SET recordID=NULL 
SET DATE = STR_TO_DATE(@DATE, '%d-%m-%Y'), 
LAST_CHANGE_DATE = STR_TO_DATE(@LAST_CHANGE_DATE, '%d-%m-%y') 

我也用這個,所以丟棄的recordId領域:

LOAD XML LOCAL INFILE 'notacts.xml' INTO TABLE acts 
ROWS IDENTIFIED BY '<ROW>' 
(column1, column2, column3, @DATE, column5, @LAST_CHANGE_DATE) 
SET recordID=NULL 
SET DATE = STR_TO_DATE(@DATE, '%d-%m-%Y'), 
LAST_CHANGE_DATE = STR_TO_DATE(@LAST_CHANGE_DATE, '%d-%m-%y') 

兩個命令都導致同一ABO VE提到的錯誤消息

0

啊,對不起,是我的錯,我終於得到它的工作,但像他這樣OFC:

LOAD XML LOCAL INFILE 'notacts.xml' INTO TABLE acts 
ROWS IDENTIFIED BY '<ROW>' 
(recordID, ID, AA_NUMBER, CONTENT, @DATE, FA_NUMBER, @LAST_CHANGE_DATE) 
SET recordID=NULL 
SET DATE = STR_TO_DATE(@DATE, '%d-%m-%Y'), 
LAST_CHANGE_DATE = STR_TO_DATE(@LAST_CHANGE_DATE, '%d-%m-%y') 
相關問題