SQL Server 数据库字符串分割函数,源代码如下:
ALTER FUNCTION [dbo].[f_split] ( @SourceStr VARCHAR(MAX), -- 源字符串 @SplitStr VARCHAR(100) -- 分割字符串 ) RETURNS @result TABLE (a VARCHAR(1000)) AS BEGIN DECLARE @i INT SET @SourceStr = RTRIM(LTRIM(@SourceStr)) SET @i = CHARINDEX(@SplitStr, @SourceStr) -- 循环处理字符串 WHILE @i >= 1 BEGIN -- 添加至结果数据表 IF LEN(LEFT(@SourceStr, @i - 1)) > 0 BEGIN INSERT INTO @result(a) VALUES (LEFT(@SourceStr, @i - 1)) END -- 重新设置新数据 SET @SourceStr = SUBSTRING(@SourceStr, @i + 1, LEN(@SourceStr)-@i) SET @i = CHARINDEX(@SplitStr, @SourceStr) -- 解决最后一个遗漏问题 IF @i <= 0 AND LEN(@SourceStr) > 1 BEGIN INSERT INTO @result(a) VALUES (@SourceStr) END END RETURN END
调用方式:
DECLARE @SourceStr VARCHAR(MAX) = '+103+105+107-+3+' SELECT * FROM [MetaData].[dbo].f_split(@SourceStr, '+')
输出结果:
a --- 103 105 107- 3