在項目中,使用SQLServer數據庫,有一個需求,需要將數據庫的某一列,轉換成逗號分隔的字符串。同時,需要將處理完的字符串,轉換成為一列。
經過查閱資料與學習,通過以下方式可以實現如上所述需求:
1、編寫一個表值函數,傳入一個字符串,實現轉換成列,條件以逗號分隔(任何符號都可以自定義)
//空格分隔的字符串 CREATE FUNCTION [dbo].[GetInStr] (@SourceStr varchar(2000))--源字符串 RETURNS @table table(list varchar(50) ) AS BEGIN -- select @sourcestr = replace(@sourcestr,';',',') -- select @sourcestr = replace(@sourcestr,' ',',') --declare @OutStr varchar(200) if charindex(',',@sourcestr)>0 begin declare @i int declare @n int set @i=1 while charindex(',',@sourcestr,@i)>0 begin set @n=charindex(',',@sourcestr,@i) insert into @table values(substring(@sourcestr,@i, @n-@i) ) set @i=@n+1 end insert into @table values(substring(@sourcestr,@i,len(@sourcestr)-@i+1)) end else insert into @table values(@sourcestr) delete from @table where isnull(list,'') = '' return END
2、通過for XML Path實現將列轉換成逗號連接的字符串
SELECT STUFF((SELECT ','+字段名 FROM 表名 for xml path('')),1,1,'')
STUFF函數的意義是去掉組成字符串的尾數逗號。