sql server split函数

----------------------------------------------------------------------
-- 版权:2011
-- 时间:2011-06-17
-- 用途:切分字符串,将忽略连续分隔符和分隔符之间的空字符
-- 用法:SELECT * FROM [dbo].[WF_Split]('a,b,c,d',',');
--    返回表结构:
--    id    自增主键
--    rs    分隔符切分的每个段落
----------------------------------------------------------------------
USE QPTreasureDB
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[WF_Split]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION dbo.[WF_Split]
GO
----------------------------------------------------------------
CREATE FUNCTION [dbo].[WF_Split]
(
  @strSource NVARCHAR(4000),  --要操作的字符串
  @strSeparator CHAR(1)     --分隔符,单字节
)
RETURNS @tbResult TABLE(id INT IDENTITY(1,1),rs NVARCHAR(1000))
WITH ENCRYPTION AS
BEGIN
DECLARE @dwIndex INT ,@strResult NVARCHAR(1000);
SET @strSource = RTRIM(LTRIM(@strSource)); -- 消空格
SET @dwIndex = CHARINDEX(@strSeparator,@strSource);  -- 取得第一个分隔符的位置

WHILE @dwIndex>0
BEGIN
SET @strResult = LTRIM(RTRIM(LEFT(@strSource,@dwIndex-1)));
IF @strResult IS NULL OR @strResult = '' OR @strResult = @strSeparator
BEGIN
SET @strSeparator = SUBSTRING(@strSource,@dwIndex+1,LEN(@strSource)-@dwIndex); --将要操作的字符串去除已切分部分
SET @dwIndex = CHARINDEX(@strSeparator,@strSource); --循环量增加
    CONTINUE;
END

INSERT @tbResult VALUES(@strResult);
SET @strSource = SUBSTRING(@strSource,@dwIndex+1,LEN(@strSource)-@dwIndex); --将要操作的字符串去除已切分部分
SET @dwIndex=CHARINDEX(@strSeparator,@strSource); --循环量增加
END
--处理最后一节
IF @strSource IS NOT NULL AND LTRIM(RTRIM(@strSource)) <> '' AND @strSource <> @strSeparator
BEGIN
INSERT @tbResult VALUES(@strSource)
END

RETURN;
END




原文地址:https://www.cnblogs.com/yuanxiaoping_21cn_com/p/7354954.html