sql字段里有逗号隔开的数据,怎么取值
table1:idcode10012001,0023001,002,003table2:codename001数学002体育003美术要求结果idname1数学2数学,体...
table 1 :
id code
1 001
2 001,002
3 001,002,003
table 2:
code name
001 数学
002 体育
003 美术
要求结果
id name
1 数学
2 数学,体育
3 数学,体育,美术 展开
id code
1 001
2 001,002
3 001,002,003
table 2:
code name
001 数学
002 体育
003 美术
要求结果
id name
1 数学
2 数学,体育
3 数学,体育,美术 展开
展开全部
--测试数据
with table1(id,code) as (
select 1,'001' union all
select 2,'001,002' union all
select 3,'001,002,003'),
table2(code,name) as(
select '001','数学' union all
select '002','体育' union all
select '003','美术')
--用charindex和for xml path实现批量替换的功能,适用于sql server 2005及以上版本
select table1.id,stuff((
select ','+table2.name from table2
where charindex(','+table2.code+',',','+table1.code+',')>0
order by table2.code
for xml path('')
),1,1,'') as name
from table1
结果:
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
测试数据with table1(id,code) as (select 1,'001' union allselect 2,'001,002' union allselect 3,'001,002,003'),table2(code,name) as(select '001','数学' union allselect '002','体育' union allselect '003','美术') --用charindex和for xml path实现批量替换的功能,适用于sql server 2005及以上版本select table1.id,stuff(( select ','+table2.name from table2 where charindex(','+table2.code+',',','+table1.code+',')>0 order by table2.code for xml path('') ),1,1,'') as name from table1
结果:
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
--分隔字符串
ALTER function f_splitstr(@SourceSql varchar(8000),@StrSeprate varchar(100))
returns @temp table(F1 varchar(100))
as
begin
declare @ch as varchar(100)
set @SourceSql=@SourceSql+@StrSeprate
while(@SourceSql<>'')
begin
set @ch=left(@SourceSql,charindex(',',@SourceSql,1)-1)
insert @temp values(@ch)
set @SourceSql=stuff(@SourceSql,1,charindex(',',@SourceSql,1),'')
end
return
end
GO
--模仿下面的函数 (你的需要一个表连接查询)
Create FUNCTION JoinString --合并字符串 多行合并为一行
(
@UserName varchar(50)
)
RETURNS varchar(8000)
AS
BEGIN
declare @Str varchar(8000)
set @Str = ''
select @Str = @Str +',' + ISNull(BuMenName,'') from ERPUserGuanliDept
where UserName = @UserName
if(@Str<>'')
set @Str=substring(@Str,2,len(@Str)-1)
return @Str
END
--使用时
select distinct UserName,dbo.JoinString(UserName) as DeptList from ERPUserGuanliDept
ALTER function f_splitstr(@SourceSql varchar(8000),@StrSeprate varchar(100))
returns @temp table(F1 varchar(100))
as
begin
declare @ch as varchar(100)
set @SourceSql=@SourceSql+@StrSeprate
while(@SourceSql<>'')
begin
set @ch=left(@SourceSql,charindex(',',@SourceSql,1)-1)
insert @temp values(@ch)
set @SourceSql=stuff(@SourceSql,1,charindex(',',@SourceSql,1),'')
end
return
end
GO
--模仿下面的函数 (你的需要一个表连接查询)
Create FUNCTION JoinString --合并字符串 多行合并为一行
(
@UserName varchar(50)
)
RETURNS varchar(8000)
AS
BEGIN
declare @Str varchar(8000)
set @Str = ''
select @Str = @Str +',' + ISNull(BuMenName,'') from ERPUserGuanliDept
where UserName = @UserName
if(@Str<>'')
set @Str=substring(@Str,2,len(@Str)-1)
return @Str
END
--使用时
select distinct UserName,dbo.JoinString(UserName) as DeptList from ERPUserGuanliDept
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一样的取出来,只是取出来后是个字符串,要处理,用explode()函数分隔逗号就行了
追问
请问具体怎么写?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询