sqlserver结果集转为字符串
生活随笔
收集整理的這篇文章主要介紹了
sqlserver结果集转为字符串
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
比如有語句select?username?from?Employee
返回結果是:
username
張三
李四
王五
怎么輸出一個字符串類似:
張三,李四,王五
答:
declare @s varchar(1000) select @s=isnull(@s+',','')+username from Employee select @s as username -------------------------------------------------------------------------- -- Author : htl258(Tony) -- Date : 2010-03-31 00:38:11 -- Version:Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) -- Jul 9 2008 14:43:34 -- Copyright (c) 1988-2008 Microsoft Corporation -- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2) -------------------------------------------------------------------------- --> 生成測試數據表:EmployeeIF NOT OBJECT_ID('[Employee]') IS NULLDROP TABLE [Employee] GO CREATE TABLE [Employee]([username] NVARCHAR(10)) INSERT [Employee] SELECT N'張三' UNION ALL SELECT N'李四' UNION ALL SELECT N'王五' GO --SELECT * FROM [Employee]-->SQL查詢如下:DECLARE @S VARCHAR(100) SELECT @S=ISNULL(@S+',','')+[username] FROM [Employee] PRINT @S --RESULT: --張三,李四,王五另外一個
請教各位大大?如何將 '01,02,03,04' 轉換為1列的結果集 01 02 03 04 /* 拆分字符串 * */ --拆分單列+序號 --方法一:利用數字輔助表 if object_id('fn_SplitTSQL')is not null drop function fn_SplitTSQL GO create FUNCTION dbo.fn_SplitTSQL(@s NVARCHAR(MAX), @split NCHAR(1)) RETURNS TABLE AS RETURNSELECTn - LEN(REPLACE(LEFT(array, n), @split, '')) + 1 AS rn,SUBSTRING(array, n,CHARINDEX(@split, array + @split, n) - n) AS colFROM (SELECT @s AS array) AS DJOIN dbo.NumsON n <= LEN(array)AND SUBSTRING(@split + array, n, 1) = @split; GO--方法二:直接拆分 if object_id('f_split')is not null drop function f_split go create function f_split ( @s varchar(8000), --待分拆的字符串 @split varchar(10) --數據分隔符 )returns table asreturn(select Row_number()over(order by Number) rn ,substring(@s,number,charindex(@split,@s+@split,number)-number)as colfrom master..spt_valueswhere type='p' and number<=len(@s+'a') and charindex(@split,@split+@s,number)=number) goselect * from dbo.f_split('11,2,3',',') select * from dbo.fn_SplitTSQL('11,2,3',',') GO--拆分多列 if object_id('fn_MutiSplitTSQL')is not null drop function fn_MutiSplitTSQL GO create FUNCTION dbo.fn_MutiSplitTSQL (@s NVARCHAR(MAX), @split NCHAR(1) ,@Sub@split NCHAR(1)= N',') RETURNS TABLE AS RETURNselect * from (SELECT d.rn ,'col'+ cast( n - LEN(REPLACE(LEFT(col, n), @Sub@split, '')) + 1 as varchar(10)) AS attribute, SUBSTRING(col, n, CHARINDEX(@Sub@split, col + @Sub@split, n) - n) AS value FROM ( SELECT n - LEN(REPLACE(LEFT(array, n), @split, '')) + 1 AS rn, SUBSTRING(array, n, CHARINDEX(@split, array + @split, n) - n) AS col FROM (SELECT @s AS array) AS D JOIN dbo.Nums a ON n <= LEN(array) AND SUBSTRING(@split + array, n, 1) = @split ) AS D JOIN dbo.Nums a ON n <= LEN(col) AND SUBSTRING(@Sub@split + col, n, 1) = @Sub@split ) as dPIVOT(max(value) FOR attribute IN(col1,col2 ,col3,col4,col5 )) AS P GOselect col1,col2,col3,col4from dbo.fn_MutiSplitTSQL('$092-1350,099201-080901,12050720,2012-6-11$092-0970,099204-072301,12050734,2012-6-11$','$',',') GOhttp://bbs.csdn.net/topics/390241555
http://bbs.csdn.net/topics/330192048
www.im1024.com
轉載于:https://www.cnblogs.com/rash/archive/2012/11/06/2757436.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的sqlserver结果集转为字符串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 又重装了系统win8+office201
- 下一篇: 【转】理解JavaScript中的事件处