大家好我需要将文件加载到表中
我用
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;
执行时遇到此错误Error Code: 1406. Data too long for column 'me' at row 1
我所做的是计算字段之间的空格是字母数字,只在字段之间添加数字字段。
我无法更改文件结构如何更改表格以便保存信息?
答案 0 :(得分:1)
您的LOAD DATA INFILE
目前只看到一列
您需要执行以下操作
use test
DROP TABLE bulkdata;
CREATE TABLE bulkkdata
(
id INT NOT NULL AUTO_INCREMENT,
txt CHAR(84),
PRIMARY KEY (id)
);
LOAD DATA INFILE 'D:....example.txt' INTO TABLE bulkdata
CHARACTER SET utf8
LINES TERMINATED BY '\r\n' (txt);
txt
字段INSERT INTO test_table (me,group_b,agent,element,...)
SELECT
SUBSTR(txt,1,4),
SUBSTR(txt,5,10),
SUBSTR(txt,15,9),
SUBSTR(txt,24,10),
...
FROM bulkdata;
答案 1 :(得分:1)
您可以使用LOAD DATA INFILE
语句中的变量首先保留行,然后为此变量分配每列计算。这样,您不需要辅助表来首先将数据加载到其中并在之后处理它。
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),
...
;
在manual:
中详细了解相关信息列列表可以包含列名称或用户变量。 使用用户变量,SET子句使您可以执行 在将结果分配给它们之前转换它们的值 列。
SET子句中的用户变量可以通过多种方式使用。该 以下示例直接使用第一个输入列作为值 t1.column1,并将第二个输入列分配给用户变量 在用于之前进行分割操作 t1.column2的值:
LOAD DATA INFILE 'file.txt' INTO TABLE t1 (column1, @var1) SET column2 = @var1/100;
SET子句可用于提供非来自输入的值 文件。以下语句将column3设置为当前日期和 时间:
LOAD DATA INFILE'file.txt' INTO表t1 (column1,column2) SET column3 = CURRENT_TIMESTAMP;
您还可以通过将输入值分配给用户变量来丢弃输入值 而不是将变量分配给表列:
LOAD DATA INFILE 'file.txt' INTO TABLE t1 (column1, @dummy, column2, @dummy, column3);
使用列/变量列表和SET子句受制于 以下限制:
SET子句中的赋值应该只有赋值运算符左侧的列名。
您可以在SET分配的右侧使用子查询。返回要分配给列的值的子查询可以是a 标量子查询只。此外,您不能使用子查询进行选择 正在加载的表。
不会为列/变量列表或SET子句处理IGNORE子句忽略的行。
使用固定行格式加载数据时无法使用用户变量,因为用户变量没有显示宽度。