ALTER FUNCTION [dbo].[f_splitSTR]( @s varchar(8000), --待分拆的字符串 @split varchar(10) --數據分隔符 )RETURNS @re TABLE( col varchar(max)) AS BEGIN DECLARE @splitlen int -- 取分隔符的長度, 在分隔符后面加一個字符是為了避免分隔符以空格結束時, 取不到正確的長度 SET @splitlen = LEN(@split + 'a') - 2 -- 如果待分拆的字符串中存在數據分隔符, 則循環取出每個數據項 WHILE CHARINDEX(@split, @s)>0 BEGIN -- 取第一個數據分隔符前的數據項 INSERT @re VALUES(LEFT(@s, CHARINDEX(@split, @s) - 1)) -- 將已經取出的第一個數據項和數據分隔符從待分拆的字符串中去掉 SET @s = STUFF(@s, 1, CHARINDEX(@split, @s) + @splitlen, '') END -- 保存最后一個數據項(最后一個數據項后面沒有數據分隔符, 故在前面的循環中不會被處理) INSERT @re VALUES(@s) RETURN end
例子:
原文忘記了出處。
取某分隔符之前的字符串(自己寫的函數,希望多多交流)
create FUNCTION [dbo].[fn_leftFirst] ( @source nvarchar(max), @split nvarchar(1000) ) RETURNS nvarchar(max) AS BEGIN if(CHARINDEX(@split, @source)>0)BEGIN return left(@source,CHARINDEX(@split, @source)-LEN(@split)+1) END return @source END
20180809:字符串分隔方法二
今日寫sql語句時提示有SplitString函數,查了一下用法,值得推薦
select * from SplitString('待拆分的字符串','分隔符',返回值是否包含空串(bit))
示例:
select * from SplitString('201,202,203,3109,3179,3638,4384,4447,4462,3012',',',1)