2011-11-27 37 views
2

如何讓存儲在SQL數據庫的逗號分隔值成單個值如何獲得逗號分隔存儲在SQL Server中列的值

例如,在SQL數據庫列存儲與逗號值如下圖所示,

EligibleGroup 

A11,A12,A13 
B11,B12,B13 

我需要得到

EligibleGroup 

A11 
A12 
A13 
B11 
B12 
... 

我寫了一個查詢,將我拿一些員工名單與員工姓名和資格組

XXX A11 
YYY B11 
ZZZ C11 

我需要檢查在這個

EligibleGroup 

A11,A12,A13 
B11,B12,B13 

eligiblegroup下降,員工(XXX,YYY,ZZZ)返回我只有行。

回答

0

你可以使用子查詢:

SELECT employee_name, eligible_group 
FROM YourTable 
WHERE eligible_group IN 
     (SELECT SPLIT(EligibleGroup) 
     FROM tblEligibleGroup 
     WHERE <some conditions here>) 

我不相信在SQL Server中的「SPLIT」函數存在,所以你必須要麼創建一個用戶定義的函數來處理,或者你可以用漂亮的解決方法這裏建議:How do I split a string so I can access item x?

+1

我認爲OP實際上是在尋找某人提供分裂功能,而不是那麼多被告知他需要一個。 – Icarus

0

假設EligibleGroup具有固定長度的數據,你可以嘗試使用SUBSTRING如下:

select substring(EligibleGroup,1,3) from @test union all 
select substring(EligibleGroup,5,3) from @test union all 
select substring(EligibleGroup,9,3) from @test 

這將返回:

A11 
A12 
A13 
B11 
B12 
... 

,您可以嘗試在Data Explorer

,如果你需要檢查,如果僱員陷入其中EligibleGroup試試這個:

Select EligibleGroup from test where eligibleGroup like '%A11' 
1

使用「用戶自定義函數「,如here(包括源代碼) - 它將分割值作爲」表「(每個值一行)返回,您可以從中選擇,如

select txt_value from dbo.fn_ParseText2Table('A11,A12,A13') 

回報

A11 
A12 
A13 
0

我想你可能沒有分裂EligibleGroup。你可以通過以下方式做另一種方式:

select empId 
from yourTempEmpTable t1, EligibleGroup t2 
where t2.elibigle like '%'+t1.elibigle+'%' 

我認爲它應該工作。

0

我認爲你能做到這樣,

選擇向左( 'A11,A12,A13',3)+ SUBSTRING( 'A11,A12,A13',CHARINDEX(」, '' A11, A12,A13'),10)

相關問題