如何获取在她的值中有逗号分隔符的列的每个值?
例子:
ID ColumnUnified
1 12,34,56,78
2 80,99,70,56
我想要的是查询以获取不带逗号的号码。如果可能,在列中。
12 34 56 78
Madhivanan 的链接所指的解决方案非常有创意,但我在 SQL Server 2012 上遇到了与其中一列名称(开始)相关的小问题。我已经修改了他的答案中的代码来StartPos
代替Start
列名。
我不熟悉系统过程,但是对于那些对这个解决方案的工作原理感兴趣的人,我在 SO 上spt_values
找到了一个非常有用的过程描述。
最后,这是 Madhivana 回答的(略微)修改的代码:
CREATE TABLE #test(id int, data varchar(100))
INSERT INTO #test VALUES (1,'This,is,a,test,string')
INSERT INTO #test VALUES (2,'See,if,it,can,be,split,into,many,columns')
DECLARE @pivot varchar(8000)
DECLARE @select varchar(8000)
SELECT @pivot = COALESCE(@pivot + ',', '') + '[col'
+ CAST(number + 1 AS VARCHAR(10)) + ']'
FROM master..spt_values
WHERE type = 'p'
AND number <= ( SELECT MAX(LEN(data) - LEN(REPLACE(data, ',', '')))
FROM #test
)
SELECT @select = '
select p.*
from (
select
id,substring(data, StartPos+2, endPos-StartPos-2) as token,
''col''+cast(row_number() over(partition by id order by StartPos) as varchar(10)) as n
from (
select
id, data, n as StartPos, charindex('','',data,n+2) endPos
from (select number as n from master..spt_values where type=''p'') num
cross join
(
select
id, '','' + data +'','' as data
from
#test
) m
where n < len(data)-1
and substring(data,n+1,1) = '','') as data
) pvt
Pivot ( max(token)for n in (' + @pivot + '))p'
EXEC(@select)
DROP TABLE #test