首次写博客,与大家共勉。如果我的内容有错误或者不严谨的地方,欢迎大家提出。
我对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
其中for xml path是将返回的结果拼成一行以xml格式展现,for xml path('节点名称'),默认row
STUFF 想要多条数据拼成一行需要配合for xml path('')
亲测有效,环境win10,sqlserver