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

2021-09-21 05:43:08 字數 1472 閱讀 2448

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

更多可參考:

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

mysql將一列資料累加 MySql某一列累計查詢

問題 有一列資料,需要累計顯示出來 比如 id salary 查詢結果 id salary sumsalary 1 10000 1 10000 10000 2 20000 2 20000 30000 3 30000 3 30000 60000 解決方案 1 使用自定義變數 用 set 定義變數 my...

SQL Server將一列的多行內容拼接成一行

昨天遇到乙個sql server的問題 需要寫乙個儲存過程來處理幾個表中的資料,最後問題出在我想將乙個表的乙個列的多行內容拼接成一行,比如表中有兩列資料 類別名稱 aaa企業1 aaa企業2 aaa企業3 bbb企業4 bbb企業5 我想把這個表變成如下格式 類別名稱 aaa企業1,企業2,企業3 ...

SQL Server將一列的多行內容拼接成一行

比如表中有兩列資料 ep classes ep name aaa 企業1 aaa 企業2 aaa 企業3 bbb 企業4 bbb 企業5 我想把這個表變成如下格式 ep classes ep name aaa 企業1,企業2,企業3 bbb 企業4,企業5 一開始挺頭疼的 會了的肯定沒有這種感覺,不...