MySQL - 将数据从表1解析并移动到表2

时间:2013-08-25 16:49:34

标签: mysql substring

这是我的情况 - 我有一个从网上下载的大型文本表,它是一系列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()中,似乎没有任何工作。

有人会善意指出我的错误吗?

1 个答案:

答案 0 :(得分: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)说:从'1'的字符5开始获取子字符串。那是一个空字符串。