SQL 欄位charindex,stuff,ltrim, for xml path('') 操作字串 合併查詢結果項值
阿新 • • 發佈:2018-12-27
今天在處理一個功能的時候遇到一些功能解決問題
如:表
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 房地產經紀/銷售,建築業/工程/施工
這樣的查詢就可以到達預期效果了