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)