2013-08-25 59 views
0

這是我的情況 - 我從網上下載了一個大型文本表,它是一系列5個變量,每行固定寬度 - 「空格」分隔。MySQL - 將表1中的數據解析並移動到表2

我使用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

您需要爲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開頭的子字符串。這是一個空字符串。

+0

hooray!萬歲!萬歲!它工作得很漂亮!非常感謝!我在看它,想知道它是如何知道要分析哪個變量的,所以現在很清楚。再次,非常感謝! – TimSPQR

+0

我只是想再次感謝你。我已經使用了我在這個線程學到的更多的概念。優秀的評論,再次,謝謝!如果我可以給你第二個綠色複選標記,我會的! – TimSPQR

相關問題