2012-04-11 45 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