sql server拆分字符串

ALTER PROCEDURE [dbo].[SP_OPERATE_STRINGLIST_SPLIT]
 @STRINGLIST NVARCHAR(4000),   --被分解的清单字符串
 @INDEX  INT,     --要取段的索引(从1开始)
 @RESULT  NVARCHAR(500) OUT, --返回的结果
 @SPLITTER VARCHAR(5)=','   --分隔符号(默认为分号)

AS
BEGIN
 SET NOCOUNT ON;

 DECLARE @LIST_TEMP NVARCHAR(4000)
 --去掉两端空格
 SET @LIST_TEMP=LTRIM(RTRIM(ISNULL(@STRINGLIST,'')))
 --去掉两端的分隔符号
 --去前端
 WHILE (LEN(@LIST_TEMP)>0)AND(CHARINDEX(@SPLITTER,@LIST_TEMP,1)=1)
   SET @LIST_TEMP=SUBSTRING(@LIST_TEMP,1+LEN(@SPLITTER),LEN(@LIST_TEMP)-LEN(@SPLITTER))
 --去后端
 WHILE (LEN(@LIST_TEMP)>0)AND(CHARINDEX(@SPLITTER,@LIST_TEMP,LEN(@LIST_TEMP)-LEN(@SPLITTER)+1)=LEN(@LIST_TEMP)-LEN(@SPLITTER)+1)
   SET @LIST_TEMP=SUBSTRING(@LIST_TEMP,1,LEN(@LIST_TEMP)-LEN(@SPLITTER))
 ------------------------------------------------------------
 --循环变量
 DECLARE @TEMP_I INT
 SET @TEMP_I=1
 WHILE (@TEMP_I<@INDEX) --将要取的段解到第一位
 BEGIN
  DECLARE @NEXT_INDEX INT
  SET @NEXT_INDEX=CHARINDEX(@SPLITTER,@LIST_TEMP,1) --找下一段的索引
  IF (@NEXT_INDEX=0) --表明已不够索引要求的长度
  BEGIN
   SET @RESULT=NULL
   RETURN
  END
  ELSE
  BEGIN
   --计算第二段的开始索引,删除第一段
   SET @LIST_TEMP=SUBSTRING(@LIST_TEMP,@NEXT_INDEX+LEN(@SPLITTER),LEN(@LIST_TEMP)-(@NEXT_INDEX+LEN(@SPLITTER))+1) --使第二段排在第一位
  END

  SET @TEMP_I=@TEMP_I+1
 END
 --经过上述步骤,要取的段已经放在第一位,取第一位即可
 IF (CHARINDEX(@SPLITTER,@LIST_TEMP,1)=0) --再找不到分隔符了
 BEGIN
  --表示这是最后一个,直接返回
  SET @RESULT=@LIST_TEMP
 END
 ELSE
 BEGIN
  --这不是最后一个,截取第一段
  SET @RESULT=SUBSTRING(@LIST_TEMP,1,CHARINDEX(@SPLITTER,@LIST_TEMP,1)-1)
 END
END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值