SQL Server字串聚合拼接辦法

2022-06-18 08:33:08 字數 1711 閱讀 5967

網上搜了一圈還是有不錯的方法的,比如stuff函式,我們可以這麼寫得到上面的結果:

select [type], stuff(

( select ','+ [name]

fromtest b

where b.type =a.type

for xml path('')),1 ,1, '') [names]

fromtest a

group by [type]

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

首先,準備好需要的資料,指令碼如下:  

複製**

if exists (select * from sysobjects where id=object_id('student'))

drop table student

gocreate 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值以「;」方式進行拼接。

更多可參考:

其次,我們理解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

SQL Server字串聚合拼接辦法

資料範例如下 要得到的結果目標,獲取type相同的所有names拼接在一起的字串 sqlserver並沒有乙個直接拼接字串的函式,下面所提到的方法,只是日常的開發中自己個人用到的一些思路,僅供參考!declare temptable table type int,name nvarchar 100 ...

SQLServer字串聚合解決方法(CLR)

meteo ll 關注 寫個綜合檢視,遇到個情況,需要對字串進行聚合統計,簡化如下 任務號提交人 完工數周轉車號 x01張三 300v001 x01李四 200v002 x02王五 600v003 x02馬六 400v004 x02趙七 100v005 目的是 需要列出統計任務的完成資訊如下 任務號...

貪心 字串 拼數

原題鏈結 不知道這是第幾次做這類題了 對於兩個數a和b,我們考慮微調 若a放在前面,則數字為 a b 這裡的 號表示將b連在a後面 若b放在前面,則數字為 b a 則只需比較a b與b a的大小關係即可 即可以判斷哪個數一定放在前面問題來了,怎樣實現呢,兩兩對比?我們發現string 剛好滿足我們需...