SQL 字段charindex,stuff,ltrim, for xml path('') 操作字符串 合并查询结果项值

今天在处理一个功能的时候遇到一些功能解决问题

如:表

CREATE TABLE demo(
demo_id int identity primary key,
demo_name varchar(50)
)

INSERT INTO demo VALUES('房地产开发')
INSERT INTO demo VALUES('房地产经纪/销售')
INSERT INTO demo VALUES('建筑业/工程/施工')

1    房地产开发
2    房地产经纪/销售
3    建筑业/工程/施工

另一表demo_test

CREATE TABLE demo_test(
test_id int identity primary key,
demo_ids varchar(500)
)
1    1,2,3
2    2,3

的demo_ids 中存储了如:1,2,3

想通过SQL获取demo_ids 对应的demo_name的值

如上想直接用SQL获取demo_test中demo_ids对应的值=>房地产开发,房地产经纪/销售,建筑业/工程/施工

对于用C#代码的话 相信这个没有任何难度就能实现

以下提供sql解决方案:

首先解决获取多个项的问题 这儿使用:charindex

select demo_name from demo where charindex(CONVERT(VARCHAR,demo_id)+',','1,2,3'+',')>0 
这样就获取到了


房地产开发
房地产经纪/销售
建筑业/工程/施工


下一步就是将查询得到的值合并 这儿用到:stuff,ltrim, for xml path('')

SELECT stuff( (select ','+ltrim(demo_name) from demo 
               where charindex(CONVERT(VARCHAR,demo_id)+',','1,2,3'+',')>0 for xml path('') ),1,1,'')
如上 将两表联合查询就能得到想要的结果:

SELECT t.test_id, demoName=(SELECT stuff( (select ','+ltrim(demo_name) from demo 
                       where charindex(CONVERT(VARCHAR,demo_id)+',',t.demo_ids+',')>0 for xml path('') ),1,1,''))
from demo_test t

1    房地产开发,房地产经纪/销售,建筑业/工程/施工
2    房地产经纪/销售,建筑业/工程/施工

这样的查询就可以到达预期效果了






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值