如何将存储在Sql Db中的逗号分隔值转换为单个值
例如在sql DB中,列以逗号值存储,如下所示,
EligibleGroup
A11,A12,A13
B11,B12,B13
我需要
EligibleGroup
A11
A12
A13
B11
B12
...
我编写了一个查询,会向我提供一些员工名单和符合条件的组的员工列表
XXX A11
YYY B11
ZZZ C11
我需要检查员工(XXX,YYY,ZZZ)符合条件的群体是否在此范围内
EligibleGroup
A11,A12,A13
B11,B12,B13
只返回那些行。
答案 0 :(得分:1)
使用“用户定义的函数”,如显示的here(包括源代码) - 它将分割的值作为“表”(每个值一行)返回,如
select txt_value from dbo.fn_ParseText2Table('A11,A12,A13')
返回
A11
A12
A13
答案 1 :(得分: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?
答案 2 :(得分: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'
答案 3 :(得分:0)
我认为你可能不必拆分EligibleGroup。你可以通过以下方式做另一种方式:
select empId
from yourTempEmpTable t1, EligibleGroup t2
where t2.elibigle like '%'+t1.elibigle+'%'
我认为它应该有用。
答案 4 :(得分:0)
我认为你可以这样做,
选择左('A11,A12,A13',3)+ SUBSTRING('A11,A12,A13',charindex(',','A11,A12,A13'),10)