servers split sql_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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值