mysql加载数据填充,不包含以结尾的字段

mysql加载数据填充,不包含以结尾的字段,mysql,sql,Mysql,Sql,大家好,我需要把一个文件加载到表中 我用 LOAD DATA INFILE 'D:....example.txt' INTO TABLE test_table CHARACTER SET utf8 LINES TERMINATED BY '\r\n'; 我的档案看起来 4STPS 0000000480000015426 20040425 42.480060981876 20150325 11 4STPS 000000048000001

大家好,我需要把一个文件加载到表中

我用

LOAD DATA INFILE 'D:....example.txt' INTO TABLE test_table
CHARACTER SET utf8
LINES TERMINATED BY '\r\n';
我的档案看起来

   4STPS      0000000480000015426  20040425            42.480060981876  20150325  11
   4STPS      0000000480000015458  20040425           110.240060981880  20150325  11
   4STPS      0000000480000015492  20040425           242.500060981883  20150325  11
   4STPS      0000000480000015583  20040510            92.510060981888  20150325  11
   4STPS      0000000480000015584  20040510            92.490060981889  20150325  11
   4STPS      0000000480000015592  20040510            87.140060981890  20150325  11
   4STPS      0000000480000015631  20040510           117.500060981896  20150325  11
我的桌子是

CREATE TABLE `test_table` (
  `me` varchar(4) DEFAULT NULL,
  `group_b` varchar(10) DEFAULT NULL,
  `agent` varchar(9) DEFAULT NULL,
  `element` varchar(10) DEFAULT NULL,
  `ini_vig` decimal(8,0) DEFAULT NULL,
  `amount` decimal(10,4) DEFAULT NULL,
  `recive` varchar(8) DEFAULT NULL,
  `ven_rbo` decimal(8,0) DEFAULT NULL,
  `ado` varchar(3) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
当我执行时,得到这个错误
错误代码:1406。第1行“me”列的数据太长

我所做的是计算字段之间的空格是字母数字,数字字段只在字段之间添加


我无法更改文件结构如何更改表格以便您保存信息?

您的
加载数据填充
此时只看到一列

您将需要执行以下操作

步骤01:创建具有单列的表以加载批量数据 步骤02:加载批量数据的单个列 步骤02:用于从
txt
字段中提取字段
试试看 您可以在
LOAD DATA infle
语句中使用一个变量,先保存行,然后在此变量上分配每列计算。这样,您就不需要先将数据加载到helper表中,然后再对其进行处理

LOAD DATA INFILE 'D:....example.txt' INTO TABLE bulkdata
CHARACTER SET utf8
LINES TERMINATED BY '\r\n' (@my_fancy_variable)
SET column1 = SUBSTR(@my_fancy_variable, 1, 4),
column2 = SUBSTR(@my_fancy_variable, 5, 10),
...
;
请在以下网站上阅读更多信息:

列列表可以包含列名或用户变量。 对于用户变量,SET子句允许您执行 在将结果指定给之前对其值进行转换 列

SET子句中的用户变量可以以多种方式使用。这个 下面的示例将第一个输入列直接用于值 ,并将第二个输入列指定给用户变量 在用于数据传输之前进行除法运算的 t1.2的值:

LOAD DATA INFILE 'file.txt'
  INTO TABLE t1
  (column1, @var1)
  SET column2 = @var1/100;
SET子句可用于提供非从输入派生的值 文件下面的语句将column3设置为当前日期和 时间:

加载数据填充“file.txt” 进入表t1 (第1、2栏) SET column3=当前时间戳

您还可以通过将输入值分配给用户变量来放弃输入值 并且不将变量分配给表列:

LOAD DATA INFILE 'file.txt'
  INTO TABLE t1
  (column1, @dummy, column2, @dummy, column3);
列/变量列表和集合子句的使用受 以下限制:

  • SET子句中的赋值运算符的左侧应该只有列名

  • 可以在集合指定的右侧使用子查询。返回要分配给列的值的子查询可以是 仅标量子查询。此外,不能使用子查询从中进行选择 正在加载的表

  • 对于列/变量列表或SET子句,不会处理被IGNORE子句忽略的行

  • 加载固定行格式的数据时不能使用用户变量,因为用户变量没有显示宽度


老实说,这应该是公认的答案,因为它不需要像我的答案那样使用临时表来加载+这是我的荣幸。
LOAD DATA INFILE 'D:....example.txt' INTO TABLE bulkdata
CHARACTER SET utf8
LINES TERMINATED BY '\r\n' (@my_fancy_variable)
SET column1 = SUBSTR(@my_fancy_variable, 1, 4),
column2 = SUBSTR(@my_fancy_variable, 5, 10),
...
;
LOAD DATA INFILE 'file.txt'
  INTO TABLE t1
  (column1, @var1)
  SET column2 = @var1/100;
LOAD DATA INFILE 'file.txt'
  INTO TABLE t1
  (column1, @dummy, column2, @dummy, column3);