0

这是我的情况 - 我从网上下载了一个大文本表,它是一系列 5 个变量,每行具有固定宽度 - “空格”分隔。

我正在使用 phpMYADMIN 上传数据(过去我已经成功使用逗号分隔的上传),但是这个特殊的表格非常“漂亮”和“易于使用”,我想上传它并了解上传固定宽度的表格到一个分贝。

在网上我发现了一个建议,将固定宽度的表格作为一系列单行上传,然后再用它做一些事情。那是成功的。

所以现在我有一个名为“monolith”的表,它有一列和 90,000 行,每行大约 450 个字符长。

此外,在同一页面上,他们建议在“monolith”表上使用简单的 MySQL 代码,解析每一行,并将这些变量放入目标表中。我玩弄了那个代码,最后决定这样做:

INSERT INTO icd10new
    (icd10order, icd10code, icd10header, icd10short, icd10long)
SELECT SUBSTRING(1,5) AS 'icd10order',
    SUBSTRING(7,7) AS 'icd10code',
    SUBSTRING(15,1) AS 'icd10header',
    SUBSTRING(17, 60) AS 'icd10short',
    SUBSTRING(78, 255) AS 'icd10long'
FROM monolith;

代码“完成”,但表格要么完全为空(正确的总行数),要么第三个变量填充了“15”。

我已经尝试了带单引号和不带单引号的代码,将所有子字符串放在 VALUE() 中,但似乎没有任何效果。

有人会指出我的错误吗?

4

1 回答 1

1

您需要该substring()函数的字符串参数:

INSERT INTO icd10new(icd10order, icd10code, icd10header, icd10short, icd10long)
SELECT SUBSTRING(col, 1,5) AS 'icd10order',
    SUBSTRING(col, 7,7) AS 'icd10code',
    SUBSTRING(col, 15,1) AS 'icd10header',
    SUBSTRING(col, 17, 60) AS 'icd10short',
    SUBSTRING(col, 78, 255) AS 'icd10long'
FROM monolith;

(用于col使用列名中的任何内容monolith。)

MySQL 正在将数字转换为字符串。所以,SUBSTRING(1, 5)就是说:取从字符 5 开始的子字符串'1'。那是一个空字符串。

于 2013-08-25T16:57:29.350 回答