Sql Server將一列字段拼接成字符串方法


  最近在項目中遇到個問題,需要將表中某列字段合並成字符串輸出,如果直接通過代碼全部讀取出來,再遍歷進行拼接顯然不是最好的方法,所以想着能否在數據讀取的時候直接拼接好返回,網上搜了可通過for xml來實現。

  首先,准備好需要的數據,腳本如下:  

if exists (select * from sysObjects where id=object_id('Student'))
    drop table Student
go

create table Student
(
    Id int,
    Name varchar(20)
)

go 
insert into Student values(1,'張三');
insert into Student values(2,'李四');
insert into Student values(3,'王五');

 當前表中數據如下:

  

 

 需要將Name以“張三;李四;王五”格式顯示。

 具體通過實現如下:  

select stuff((
select ';'+name
from Student for xml path('')),1,1,'') as name

 乍一看,是不是有點迷糊,不急,下面我們一一道來。

 上面語句我們分為兩部分來看,首先要明白for xml path的用法,在SQL SERVER中我們有很多方法讀取XML字段中的片段,反過來SQL SERVER也允許我們將表數據以XML方式顯示,for xml path便是以xml顯示的一種方式。  

  select ';'+name
  from Student for xml path('')

 這段代碼就是告訴數據庫服務器要將生成的XML中name值以“;”方式進行拼接。

   更多可參考:http://www.cnblogs.com/doubleliang/archive/2011/07/06/2098775.html

 

    其次,我們理解stuff函數的用法,通過上述代碼拼接生成的內容為“;張三;李四;王五”,顯然最前的“;”是多余的,所以我們通過stuff來去除。

 STUFF(string,insert position,delete count,string inserted)函數是將一個字符串插入到另一個字符串中。插入時,插入的字符串可能刪除指定數量的字符。

 第一個參數string,指的就是你要操作的內容,可以是一個固定字符串,也可以指定為某列;

 第二個參數insert position,指插入開始位置,SQLSERVER中默認是從1開始,而非從0開始

 第三個參數delete count,指的是要刪除的字符個數,從position刪除指定的個數,如果count為0表示不刪除;

 第四個參數string inserted,表示要插入的字符串;

    eg:select  stuff('abcdefg',3,2,'123')

 結果:ab123efg

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM