我想导入以下数据(字段之间没有分隔符):
20232045001100000700002769T011998-01-22 0001-01-01 0001-01-01 0 1998-01-22-13.48.03.363642
20168752001100000700037166T011997-10-21 0001-01-01 0001-01-01 0 1997-10-21-19.00.50.529609
20195936001100000700793006T011997-11-18 0001-01-01 0001-01-01 0 1997-11-18-17.59.30.518192
这是结构。
CREATE TABLE `tabla008` (
`numclien` varchar(8) NOT NULL DEFAULT '',
`centidad` varchar(4) NOT NULL DEFAULT '',
`coficina` varchar(4) NOT NULL DEFAULT '',
`digcontr` varchar(2) NOT NULL DEFAULT '',
`ccuenta` varchar(8) NOT NULL DEFAULT '',
`clainter` varchar(1) NOT NULL DEFAULT '',
`secinter` varchar(2) NOT NULL DEFAULT '',
`fealrela` varchar(10) NOT NULL DEFAULT '0000-00-00',
`space1` varchar(1) NOT NULL DEFAULT '',
`fechape` varchar(10) NOT NULL DEFAULT '0000-00-00',
`space2` varchar(1) NOT NULL DEFAULT '',
`fecancel` varchar(10) NOT NULL DEFAULT '0000-00-00',
`peyestat` varchar(1) NOT NULL DEFAULT '',
`indaviso` varchar(1) NOT NULL DEFAULT '',
`iugestor` varchar(6) NOT NULL DEFAULT '',
`pehstamp` varchar(26) NOT NULL DEFAULT '',
`indcoext` varchar(1) NOT NULL DEFAULT ''
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
(我必须把所有在VARCHAR中进行测试) 然后,我想用这句话SQL
导入这个数据LOAD DATA LOCAL INFILE 'c:/mis/RBA/RBACalidad/Entradas/PEBC.PEFD.FIX.UNLO.TABLA008.D1140813.TXT'
INTO TABLE tabla008
FIELDS TERMINATED BY '' LINES TERMINATED BY '\r\n';
但是,当运行它时,结果是:
结果必须是:
我不明白为什么这是结果,如果我的句子SQL很好!
由于
答案 0 :(得分:1)
你的问题有两个方面:
如果您有定义" FIELDS TERMINATED BY ''
"这意味着根本没有字段分隔符。因此,列长度适用:
你的行和字段长度:
20232045001100000700002769T011998-01-22 0001-01-01
^ split into "numclien"
^split in to "centidad"
...
如果您的CSV包含标签(\ t),请更改为
FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r\n';
这将是正常的csv语法。在您的示例中,该文件包含一个或多个空格作为字段分隔符。你可以测试一下
FIELDS TERMINATED BY ' ' LINES TERMINATED BY '\r\n';
但我希望这会在行中产生空字段。最好通过标签来删除文件并替换空格序列。
确切地说,csv应该适合列长度,或者列应该具有相应的类型集(如日期,时间戳等,请参阅上面的注释)
答案 1 :(得分:0)
嗯,我不想这样做,但我做到了。
我用这个:
LOAD DATA LOCAL INFILE 'c:/mis/RBA/RBACalidad/Entradas/TABLA008.D1140813.TXT'
INTO TABLE tabla008
(@row)
SET numclien=SUBSTRING(@row,1,8),
entidad=SUBSTRING(@row,9,4),
oficina=SUBSTRING(@row,13,4),
digcontrol=SUBSTRING(@row,17,2),
cuenta=SUBSTRING(@row,19,8),
clainter=SUBSTRING(@row,27,1),
secinter=SUBSTRING(@row,28,2),
fealrela=SUBSTRING(@row,30,10),
space1=SUBSTRING(@row,40,1),
fechape=SUBSTRING(@row,41,10),
space2=SUBSTRING(@row,51,1),
fecancel=SUBSTRING(@row,52,10),
space3=SUBSTRING(@row,62,1),
peyestat=SUBSTRING(@row,63,1),
indaviso=SUBSTRING(@row,64,1),
iugestor=SUBSTRING(@row,65,6),
pehstamp=SUBSTRING(@row,71,26),
indcoext=SUBSTRING(@row,97,1);
这不是一个优雅的解决方案,但它有效