2012-04-11 55 views
9

您好我有一個INFILE我想導入,但日期的形式爲:LOAD DATA INFILE輕鬆將YYYYMMDD轉換爲YYYY-MM-DD?

AADR,20120403,31.43,31.43,31.4,31.4,1100 
AAU,20120403,2.64,2.65,2.56,2.65,85700 
AAVX,20120403,162.49,162.49,154.24,156.65,2200 

有沒有簡單的方法來將日期轉換爲「2012-04-03」,而不必做一些事情比如先用perl腳本打開它,轉換日期,然後再把文件寫回去?

TIA !!

+0

嘗試使用STR_TO_DATE函數。 – Devart 2012-04-11 08:12:06

+0

是啊這工作:SELECT STR_TO_DATE('20130105','%Y%m%d');所以我猜這意味着將STR導入到表中,然後將STR_TO_DATE()運行到另一個DATE類型的表中?如果我可以在INFILE命令中執行STR_TO_DATE(),那麼應該很好。 – 2012-04-11 08:41:12

+0

LOAD DATA INFILE語句允許在一個命令中執行此操作。看看Tombom的答案。 – Devart 2012-04-11 08:50:56

回答

21

這加載和轉換一步,不需要另一個表。欲瞭解更多信息,請參閱manual

LOAD DATA INFILE 'file.txt' 
INTO TABLE t1 
FIELDS TERMINATED BY ',' 
(column1, @var1, column3, ...) 
SET column2 = STR_TO_DATE(@var1,'%Y%m%d') 
+0

是的,我得到它的工作!謝謝。把戲是搞清楚把「FIELDS SEPARATED BY」條款放在哪裏。在評論框中放入過去的東西很笨拙,但命令是: – 2012-04-11 10:02:50

+0

將數據INFILE'/home/kensey/history/AMEX_20120403.txt' 轉換成表格extract_bcp_import FIELDS TERMINATED BY',' (symbol,@ var1,openp,high ,低,最後,音量)set tdate = STR_TO_DATE(@ var1,'%Y%m%d'); – 2012-04-11 10:03:21

+0

看不到你的命令,但我偶然編輯我的答案:)現在正在測試它,以確保。 – fancyPants 2012-04-11 10:03:44