1. 程式人生 > >SQL 欄位charindex,stuff,ltrim, for xml path('') 操作字串 合併查詢結果項值

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    房地產經紀/銷售,建築業/工程/施工

這樣的查詢就可以到達預期效果了