將字串按指定的分割分成多條記錄,返回table的記錄

/*
將字串按指定的分割分成多條記錄,返回table的記錄
調用方法:
select * from dbo.f_division_string('a,bc,dd,e,f,daf,eee',',')
*/
CREATE FUNCTION dbo.f_division_string
(
@str VARCHAR(4000) --所要分割字串
,@separate VARCHAR(100) --分割符
)
RETURNS @return_table TABLE --自訂的多表值變數,用於返回記錄集
(
 idx INT --返回結果集的索引位置
 ,str_name VARCHAR(100) --分割後的字串值
)
AS
BEGIN
         DECLARE
         @count INT --迴圈次數
         ,@separate_len INT --分割符的長度
         ,@pos INT --迴圈所用的次數變數
         ,@separate_pos INT --每次分割的分割符所在當前的位置
         SET @str=LTRIM(RTRIM(@str))
         SET @separate_len=LEN(@separate)
         IF RIGHT(@str,@separate_len)=@separate
         BEGIN
                   SET @str=LEFT(@str,LEN(@str)-@separate_len)
         END
         SET @count=(LEN(@str)-LEN(REPLACE(@str,@separate,'')))/@separate_len
         SET @pos=1
         WHILE(@pos<=@count) --進行迴圈插入記錄
         BEGIN
                   SET @separate_pos=CHARINDEX(@separate,@str)
                   INSERT INTO @return_table(idx,str_name)
                   VALUES(@pos,SUBSTRING(@str,1,@separate_pos-1))
                   SET @pos=@pos+1
                   SET @str=RIGHT(@str,LEN(@str)-@separate_pos-@separate_len+1) --將提取出來的字串在原有的字串上截取
         END
         INSERT INTO @return_table(idx,str_name) --插入最後一條記錄值
         VALUES(@pos,@str)
         RETURN
END
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值