SQL 字段charindex,stuff,for xml path('') 操作字
程序员文章站
2024-01-04 13:09:28
...
很久没来这儿了 贴一个之前用到的SQL代码 今天在处理一个功能的时候遇到一些功能解决问题 如:表 [sql] CREATE TABLE demo( demo_id int identity primary key , demo_name varchar (50) ) INSERT INTO demo VALUES ( '房地产开发' ) INSERT INTO demo VALUE
很久没来这儿了 贴一个之前用到的SQL代码
今天在处理一个功能的时候遇到一些功能解决问题
如:表
[sql]- 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('建筑业/工程/施工')
2 房地产经纪/销售
3 建筑业/工程/施工
另一表demo_test
[sql]- CREATE TABLE demo_test(
- test_id int identity primary key,
- demo_ids varchar(500)
- )
2 2,3
的demo_ids 中存储了如:1,2,3
想通过SQL获取demo_ids 对应的demo_name的值
如上想直接用SQL获取demo_test中demo_ids对应的值=>房地产开发,房地产经纪/销售,建筑业/工程/施工
对于用C#代码的话 相信这个没有任何难度就能实现
以下提供sql解决方案:
首先解决获取多个项的问题 这儿使用:charindex
[html]- select demo_name from demo where charindex(CONVERT(VARCHAR,demo_id)+',','1,2,3'+',')>0
房地产开发
房地产经纪/销售
建筑业/工程/施工
下一步就是将查询得到的值合并 这儿用到:stuff,ltrim, for xml path('')
[sql]- 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 房地产经纪/销售,建筑业/工程/施工
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 建筑业/工程/施工 CREATE TABLE demo_test( test_id int identity primary key, demo_ids varchar(500) ) --------结果-------- 1 1,2,3 2 2,3 --------最终查询语句与结果---------- 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 房地产经纪/销售,建筑业/工程/施工