Mysql - 没有空格的数据

时间:2014-09-02 23:09:45

标签: mysql sql

我想导入以下数据(字段之间没有分隔符):

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';

但是,当运行它时,结果是:

http://i.stack.imgur.com/ClpyE.png

结果必须是:

http://i.stack.imgur.com/2NYou.png

我不明白为什么这是结果,如果我的句子SQL很好!

由于

2 个答案:

答案 0 :(得分:1)

你的问题有两个方面:

  • 导入文件不适合表列定义
  • 您的加载语句没有考虑csv文件的正确语法

如果您有定义" 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);

这不是一个优雅的解决方案,但它有效