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 数学,体育,美术
展开
 我来答
大宝妈谈教育
高粉答主

2020-04-16 · 关注我不会让你失望
知道小有建树答主
回答量:3306
采纳率:100%
帮助的人:53.8万
展开全部

sql字段有逗号隔开,数据取值的方法。

如下参考:

1.查询数据库表的所有字段,直接使用select语句,如下图。

2.查询数据库表部分的字段,可以使用select字段命令,从数据库表中选择字段名度。

3.根据查询的条件,在where之后使用条件,从数据库表中选择字段名所在的条件。

4.使用distinct命令查询数据库字段,以记录未重复的结果,如下图所示。

5.查询数据库表数据之前有多少条,可以使用top命令,从数据库表中选择*号。

6.查询数据库表有时为了区分字段,需要回答字段名,可以用as,从数据库表中选择字段名作为字段名。

frogley
推荐于2018-02-27 · TA获得超过1854个赞
知道小有建树答主
回答量:1008
采纳率:50%
帮助的人:1079万
展开全部
--测试数据
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

结果:

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
折柳成萌
高粉答主

2017-11-02 · 繁杂信息太多,你要学会辨别
知道顶级答主
回答量:4.4万
采纳率:96%
帮助的人:6211万
展开全部
测试数据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

结果:

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
斯内科Snake
2014-02-08 · TA获得超过523个赞
知道小有建树答主
回答量:707
采纳率:50%
帮助的人:243万
展开全部
--分隔字符串
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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
软件开发枫老师
2014-02-08 · TA获得超过585个赞
知道小有建树答主
回答量:599
采纳率:63%
帮助的人:319万
展开全部
一样的取出来,只是取出来后是个字符串,要处理,用explode()函数分隔逗号就行了
追问
请问具体怎么写?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式