sql字段里有逗号隔开的数据,怎么取值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql字段里有逗号隔开的数据,怎么取值相关的知识,希望对你有一定的参考价值。

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 数学,体育,美术

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

如下参考:

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

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

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

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

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

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

参考技术A --测试数据
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

结果:

本回答被提问者和网友采纳
参考技术B 测试数据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

结果:

参考技术C --分隔字符串
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
参考技术D 一样的取出来,只是取出来后是个字符串,要处理,用explode()函数分隔逗号就行了追问

请问具体怎么写?

MySQL 如何将Id相同的字段合并,并且以逗号隔开

数据库存的数据

sql: SELECT Id,GROUP_CONCAT(`Name` SEPARATOR \',\') NAMES FROM `stu` GROUP BY Id;

 

以上是关于sql字段里有逗号隔开的数据,怎么取值的主要内容,如果未能解决你的问题,请参考以下文章

Oracle中某一表单中的字段里的存放的值为逗号隔开另一表单字段中的多个值,该如何取值

mysql查询某数字在某字段以逗号隔开的字符里面

mysql字段存的有逗号隔开 取出来怎么分割了输出

mysql字段存的有逗号隔开 取出来怎么分割了输出

Mysql 数据字段值是用逗号隔开,如何写SQL语句

sqlserver 怎么将一个字段中61,62逗号隔开的的多个数据转变成另一张表中一个字段对应的多个数据