2014-10-17 14 views
3
插入

我行的一個MySQL表如下例找到文本位置,提取文本,並在新的列在MySQL

   Column A  

Row1 Lauguage=English&Country=USA&Gender=Male 
Row2 Gender=Female&Language=French&Country= 
Row3 Country=Canada&Gender=&Language=English 

如何能夠做到以下幾點:例如,我需要尋找國家

  1. 我需要在此文本列中找到國家的位置。這種情況隨着行而改變。
  2. 我需要然後忽略參數'國家=',只提取的價值。在某些情況下,這將是NULL(例如Row2中的示例),而在某些行中,我需要值後跟'='(例如Row1中的示例& Row3)。但是,我需要確保我只能獲得價值。不是由'&''
  3. 分隔的下一個參數一旦我提取了國家參數的值,我需要創建一個新列,現在將提取並存儲這些值。

最終結果是:新列

   Column B             

Row1   USA        
Row2        
Row3   Canada         

這裏任何幫助,將不勝感激!謝謝!

+0

你爲什麼把數據像這樣在你的桌子嗎?規範化! – Barmar 2014-10-18 00:08:18

+0

使用'LOCATE()'和'SUBSTRING()'函數。不幸的是,它在SQL中很複雜,因爲你需要對'LOCATE()'使用嵌套調用來查找結束它的'&'。 – Barmar 2014-10-18 00:10:29

回答

4

你可以選擇以下的「國家=」的文字,然後,一旦你有一個字符串,挑選前的第一個「&」

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(ColumnA, 'Country=', -1), '&', 1) AS ColumnB 
FROM `atable` 

全文見第http://dev.mysql.com/doc/refman/5.6/en/string-functions.html#function_substring-index


這裏的一個試驗來證明:

mysql> SELECT * FROM atable; 
+------+------------------------------------------+ 
| row | columna         | 
+------+------------------------------------------+ 
| Row1 | Lauguage=English&Country=USA&Gender=Male | 
| Row2 | Gender=Female&Language=French&Country= | 
| Row3 | Country=Canada&Gender=&Language=English | 
+------+------------------------------------------+ 

mysql> SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(ColumnA, 'Country=', -1), '&', 1) AS ColumnB FROM atable; 
+---------+ 
| ColumnB | 
+---------+ 
| USA  | 
|   | 
| Canada | 
+---------+ 

重新您的後續問題:

INSERT INTO atable VALUES ('Row4', 'Gender=&Language=English'); 

SELECT `row`, IF(LOCATE('Country=', ColumnA)>0, 
    COALESCE(
    NULLIF(SUBSTRING_INDEX(SUBSTRING_INDEX(ColumnA, 'Country=', -1), '&', 1), ''), 
    'Blank string is not valid!'), 
'Missing Country!') AS ColumnB  
FROM `atable` 

+------+----------------------------+ 
| row | ColumnB     | 
+------+----------------------------+ 
| Row1 | USA      | 
| Row2 | Blank string is not valid! | 
| Row3 | Canada      | 
| Row4 | Missing Country!   | 
+------+----------------------------+ 
+0

謝謝,但這似乎只適用於Row3中的示例。 參數Country =在其位置上不一致。它可能是第一個參數,也可能是第五個參數。 有沒有辦法找到Country =,然後查找下一個'&'並獲取要顯示的值?在excel中試驗: 1.存儲在A1 中的列數據2.存儲在列B1中的FIND(「國家=」,A1) - >(國家位置) 3. IFERROR(FIND(「=」A1,B1),存儲在列C1中的LEN(A1) - >(位置=) 4.列D1中存儲的IFERROR(FIND(「&」,A1,C1),LEN(A1)+1) - >(結束位置) 5. MID(A1,C1 + 1,D1-C1-1) - >在單元格E1 – Nowitz41 2014-10-19 00:49:14

+0

@ Nowitz41中顯示國家值,我測試了它,幷包含上面的輸出 – 2014-10-19 03:04:04

+0

感謝您的輸出。對於參數Country =是空白(例如:Country =&)和Country =不存在的行,快速跟進,是否有添加這種錯誤檢查功能的方法?因此,這隻會更新那些行國家=具有「有效」值。感謝您的幫助! – Nowitz41 2014-10-19 22:01:02

相關問題