2012-10-24 47 views
1

我有一個數據庫中的表(即我不允許修改),然後從每一行的子串是建立在以下方式:SQL服務器:在表

ID Value                 Column x... 
0 Apple: GDGolden Delicious, Date Picked: 5/5/2012, Color: Yellow 
1 Apple: GSGranny Smith, Date Picked: 3/24/2010, Color: Green 
2 Apple: RDRed Delicious, Date Picked: 1/15/2012, Color: Red 
3 Random Data, Apple: BRBrayburn, Date Picked: 2/15/2012, Color: Mixed 

IDINTValue是一個VarChar,由數據之間的逗號分隔。

對於表格中的每一行,我需要提取列出的子字符串,在這種情況下,是每個水果品種(即GD,GS,RD,BR)的縮寫,並將其放入臨時表其中包含該表中的所有其他列以及子字符串,但不包含Value列中的其他數據。表中的每個子字符串縮寫都只有兩個字符,但正如您在最後一行看到的那樣,它並不總是出現在列的開頭。

在我的閱讀中,聽起來好像我不得不用光標來做到這一點 - 但我想盡可能避免這種情況。反正有沒有使用遊標,通過case語句或子查詢來實現這一點?

最終的結果是這樣的:

ID Value Column x Column y... 
0 GD  
1 GS  
2 RD  
3 BR  

在此先感謝。

+0

將記錄的結構始終是'蘋果:XX '? – Taryn

+0

爲了簡單起見,我們會說是。 –

回答

4

在活動現場,你的記錄不說Apple:,你可以看看第一:

select id, 
    substring(value, charindex(':', value, 1) + 2, 2) value 
from yourtable 

SQL Fiddle with Demo

+0

非常好,謝謝你的優雅的解決方案。 –

2
SELECT ID, SUBSTRING(value, CHARINDEX('Apple: ',value)+7, 2) 
    FROM YourTable