2016-04-08 65 views
0

我在MySQL表中的列具有存儲爲文本類似這樣的「亂」的數據:MySQL的添加列從另一列彙總數據

**SIZE** 
2 
2-5 
6-25 
2-10 
26-100 
48 
50 

我想創建重寫一個新列「RevTextSize」將此列中的數據轉換爲預定義的值範圍。

If Size=2, then "RevTextSize"= "1-5" 
If Size=2-5, then "RevTextSize"= "1-5" 
If Size=6-25, then "RevTextSize"="6-25" 
... 

這很容易在Excel,SPSS和其他這樣的工具,但我怎麼能在MySQL表中做到這一點?

回答

1

你可以這樣添加一列:

ALTER TABLE messy_data ADD revtextsize VARCHAR(30); 

要填充柱:

UPDATE messy_data 
    SET revtextsize 
     = CASE 
     WHEN size = '2'  THEN '1-5' 
     WHEN size = '2-5' THEN '1-5' 
     WHEN size = '6-25' THEN '6-25' 
     ELSE size 
     END 

這是蠻力的方法,識別size每個不同的值並指定替換。


你可以使用另一個SQL語句來幫助您構建CASE表達式

SELECT CONCAT('  WHEN size = ''',d.size,''' THEN ''',d.size,'''') AS stmt 
    FROM messy_data d 
    GROUP BY d.size 

保存從結果到你喜歡的SQL文本編輯器,並在替換值謬以千里。這將加快爲需要運行以設置revtextsize列的語句(第一條語句)創建CASE表達式。

如果你想建立一些「更智能」的東西,動態評估尺寸的內容並作出明智的選擇,那就更加涉及了。如果要這樣做,我會在第二個語句中執行,生成CASE表達式。我寧願審查一下,因爲我運行更新聲明。我更喜歡讓更新語句做一些容易理解並容易解釋它在做什麼的事情。

0

使用InStr()在您的字符串中查找「 - 」並使用SUBSTRING(str,pos,len)來獲取開始&結束編號。然後使用Between子句構建您的Case子句。

希望這將有助於構建您的解決方案。

感謝