2012-07-25 59 views
1

我有這個疑問: -提取物串

select col_str, 
getVal,another_str,resultVal_str from tablename 

獲得的結果是這樣的:

col_str          getVal another_str    
'11,12,33,54,1,44'        '12' '9,5,4,8,7'    
'11,12,33,54,1,44,10,12,11,12,12'    '44' '9,5,4,8,7,6,3,5,2,4,2' 
'11,12,33,54,1,44'        '999' '9,5,4,8,7,4'    
'11,12,33'          '0'  '9,5,4'     
-----           ----  -----     
-----           ----  -----     
-----           ----  ----- 

col_str,getVal,another_str從表中傳來的列和列resultVal_str要根據計算其餘三列 邏輯resultVal_str -

查看第一次記錄getVal的值爲12並且col_str在位置編號2處具有12,則看到another_str中的位置編號2是5,因此resultVal_str是5等等。請看下圖:

col_str          getVal another_str    resultVal_str 
'11,12,33,54,1,44'        '12' '9,5,4,8,7'     5 
'11,12,33,54,1,44,10,12,11,12,12'    '44' '9,5,4,8,7,6,3,5,2,4,2'  6 
'11,12,33,54,1,44'        '999' '9,5,4,8,7,4'    0 
'11,12,33'          '0'  '9,5,4'      0 
-----           ----  -----      --- 
-----           ----  -----      --- 
-----           ----  -----      --- 

我怎麼能與得到的結果類似上面添加下一列resultVal_str

+0

我可以在這裏看到例如你給了,那沒有。 col_str和another_str中的項目不同。如果在col_str中getVal的值發生超出another_str的範圍,您會發現什麼?此外,如果getVal不存在於col_str中,你期望什麼?您的數據示例中的第4行。 – Shubhansh 2012-07-25 07:20:26

+0

然後它應該在結果表中生成0,參見上面的結果表的'resultVal_str'列。 – Bajrang 2012-07-25 10:33:23

回答

0

首先您需要使用FIND_IN_SET函數在col_str中找到getVal的位置。

一旦你的位置,你可以找到使用SUBSTRING_INDEX功能another_strresultVal從相同的位置:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(another_str, 
         ",", (FIND_IN_SET(getVal, col_str))), 
         ",", - 1) AS resultVal_str 
FROM tablename; 

測試:

SET @getVal = '12', @col_str = '11,12,33,54,1,44', @another_str = '9,5,4,8,7'; 

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(@another_str, ",", (FIND_IN_SET(@getVal, @col_str))), ",", - 1) AS resultVal_str; 
+0

但我如何在上述查詢中實現? – Bajrang 2012-07-25 07:16:34