Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 在sqlserver中分离单个列的值_Sql Server 2005 - Fatal编程技术网

Sql server 2005 在sqlserver中分离单个列的值

Sql server 2005 在sqlserver中分离单个列的值,sql-server-2005,Sql Server 2005,我在一个问题表中有一个名为categoryid的字段,可以输入多个值来显示不同的类别。 现在,我想分离每个值并分别获取它 这些值由、字符分隔 比如说 categoryid varchar 3 3,8 5,9,7 8,5,7,3,2 如何使用sql查询将它们分开? 请帮助分类varchar或nvarchar类型?也许您应该考虑规范化数据?它正在分割数据,但在加入所有数据之后………我希望查询能够分割上述任何数据datas@Abhishek好啊你想分哪一个?应通过在CTE的第一部分添加where条款

我在一个问题表中有一个名为categoryid的字段,可以输入多个值来显示不同的类别。 现在,我想分离每个值并分别获取它

这些值由、字符分隔

比如说

categoryid varchar
3
3,8
5,9,7
8,5,7,3,2
如何使用sql查询将它们分开?
请帮助分类varchar或nvarchar类型?也许您应该考虑规范化数据?它正在分割数据,但在加入所有数据之后………我希望查询能够分割上述任何数据datas@Abhishek好啊你想分哪一个?应通过在CTE的第一部分添加where条款来解决<代码>其中SomeColumn='SomeValue'我可以拆分2或拆分3,但不能同时拆分这两种类型。我的意思是,如果我编写一个查询来拆分2,则拆分超过这些值和viceversa@Abhishek-我为您提供的查询是递归的,它将拆分为100个值,无需修改。如果您有更多选项,则应在查询末尾添加
选项(maxrecursion 0)
declare @T table
(
  category_id varchar(10)
)

insert into @T
select '3' union all
select '3,8' union all
select '5,9,7' union all
select '8,5,7,3,2'

;with C(ID, category_id) as
(
  select cast(left(category_id, charindex(',', category_id+',', 1)-1) as int),
         stuff(category_id, 1, charindex(',', category_id+',', 1), '')
  from @T
  union all
  select cast(left(category_id, charindex(',', category_id+',', 1)-1) as int),
         stuff(category_id, 1, charindex(',', category_id+',', 1), '')
  from C
  where len(category_id) > 0
)
select ID
from C