欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

SQL 字段charindex,stuff,for xml path('') 操作字

程序员文章站 2024-04-05 17:26:24
...

很久没来这儿了 贴一个之前用到的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]
  1. CREATE TABLE demo(
  2. demo_id int identity primary key,
  3. demo_name varchar(50)
  4. )
  5. INSERT INTO demo VALUES('房地产开发')
  6. INSERT INTO demo VALUES('房地产经纪/销售')
  7. INSERT INTO demo VALUES('建筑业/工程/施工')
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

[sql]
  1. CREATE TABLE demo_test(
  2. test_id int identity primary key,
  3. demo_ids varchar(500)
  4. )
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

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


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

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

[sql]
  1. SELECT stuff( (select ','+ltrim(demo_name) from demo
  2. where charindex(CONVERT(VARCHAR,demo_id)+',','1,2,3'+',')>0 for xml path('') ),1,1,'')
SELECT stuff( (select ','+ltrim(demo_name) from demo where charindex(CONVERT(VARCHAR,demo_id)+',','1,2,3'+',')>0 for xml path('') ),1,1,'')如上 将两表联合查询就能得到想要的结果: [sql]
  1. SELECT t.test_id, demoName=(SELECT stuff( (select ','+ltrim(demo_name) from demo
  2. where charindex(CONVERT(VARCHAR,demo_id)+',',t.demo_ids+',')>0 for xml path('') ),1,1,''))
  3. from demo_test t
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    房地产经纪/销售,建筑业/工程/施工