SQL server數據庫拼接語句(STUFF)用法


 

我對SQLserver 中STUFF函數的理解是在sql server中將字符串中的第一個字符串某一部分字符替換成另外一部分,組成新的字符串數據。

 

STUFF(character_expression,Start,Length,character_expression)

 

參數說明:

 

character_expression:字符串數據,或字符串組成的表達式。

 

Start:開始替換的位置,start 必須大於0,否則返回NULL.

 

Length,替換長度.若長度為0,則是拼接,不刪除任何原字符串中的內容

 

character_expression:具體替換的內容,若為空的話,就是刪除第一個字符串中的指定位置指定長度的數據。

 

如:

 

SELECT STUFF('123',1,0,'0')

 

則返回字符串"0123"

 

SELECT STUFF('123',1,2,'0')

 

則返回字符串"03"

 

SELECT STUFF('1234',2,2,'78')

 

則返回字符串"1784"

 

SELECT STUFF((SELECT '|'+DAID+','+DAName FROM TDesignAlter for xml path('')),1,1,'')

 

將每一行DAID和DAName用逗號連接起來,行與行之間用‘|’隔開,且去掉第一個字符串前面的‘|’

 

返回結果:000775B3-D035-4D59-8782-4DC4C3EE90F9,“中心項目”的設計變更14|004F92D8-FA39-4F77-80D5-D7169802F5BE,“中心項目”的設計變更1|006250CD-52DD-42C3-AB56-A1B56432B12C,“中心項目”的設計變JB-09|00AB74F1-BA91-4FB2-9EBC-D3521E4EFBDE,“中心項目”的設計變更2|00C45BCF-05BC-4376-AADE-AC2D12D2D032,“中心項目”T3-06
————————————————————————————————————————————————————————————————————————————————

 

 

 

第一種:《兩張表》(年級課程兩張表互相通過GradeID進行關聯的)

select distinct(g.GradeID),g.GradeName,g.GradeNumber,

(SELECT STUFF(( SELECT ',' +convert(VARCHAR, ClassName) FROM Class c where c.GradeID = g.GradeID FOR XML PATH('')), 1, 1, '') AS UserName) as ClassName
FROM Grade g left join Class c on g.GradeID = c.GradeID;

效果展示:

 

第二種:《三張表》(年級課程和年級課程綁定表)

效果展示:

 

 第三種:《共五張表》年級課程兩張表互相通過GradeID進行關聯的-------年級表與課程表通過應該年級課程綁定表進行關聯的

select ROW_NUMBER() over(order by a.GradeID asc) as xh,
a.GradeID,a.GradeName,a.GradeNumber,
(select STUFF(( SELECT ',' + CourseTitle FROM Curriculum b1 inner join GradeCurriculumBinding b2 on b1.CurriculumID = b2.CurriculumID where b2.GradeID = a.GradeID FOR XML PATH('')), 1, 1, '')) as CourseTitle,
(SELECT STUFF(( SELECT ',' +convert(VARCHAR, ClassName) FROM Class c1 where c1.GradeID = a.GradeID FOR XML PATH('')), 1, 1, ''))as ClassName
from Grade a order by a.GradeID;

效果展示:

 


免責聲明!

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



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