加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SqlServer中解析字符串的表值函数

发布时间:2020-12-12 13:13:14 所属栏目:MsSql教程 来源:网络整理
导读:?在数据库中,经常用到了将一定格式的字符串解析的问题。以前写过类似的方法,今天又重新写了一个,发上来共享给大家。 Create?function?[dbo].[Func_SplitStringToTable]???(??????--?需要解析的字符串??????@str?nvarchar(max),??????--?分隔符??????@spli

?在数据库中,经常用到了将一定格式的字符串解析的问题。以前写过类似的方法,今天又重新写了一个,发上来共享给大家。


  1. Create?function?[dbo].[Func_SplitStringToTable]???
    (??
    ????--?需要解析的字符串??
    ????@str?nvarchar(max),??
    ????--?分隔符??
    ????@split?varchar(10)??
    )??
    returns?@t?Table?(c1?varchar(100))??
    as??
    ????begin??
    ????????declare?@i?int??
    ????????declare?@s?int??????
    ????????set?@i=1??????
    ????????set?@s=1??????
    ????????while(@i>0)??
    ????????????begin??????????????
    ????????????????set?@i=charindex(@split,@str,@s)??????????
    ????????????????if(@i>0)??????????
    ????????????????????begin??????????????
    ????????????????????????insert?@t(c1)?values(substring(@str,@s,@i-@s))??
    ????????????????????end?????????????
    ????????????????else???
    ????????????????????begin??????????????
    ????????????????????????insert?@t(c1)?values(substring(@str,len(@str)-@s+1))??????????
    ????????????????????end??????????
    ????????????????set?@s?=?@i?+?1?????????
    ????????????end??????
    ????????return??
    ????end
Create?function?[dbo].[Func_SplitStringToTable]?
(
	--?需要解析的字符串
	@str?nvarchar(max),--?分隔符
	@split?varchar(10)
)
returns?@t?Table?(c1?varchar(100))
as
	begin
	????declare?@i?int
	????declare?@s?int????
	????set?@i=1????
	????set?@s=1????
	????while(@i>0)
	????????begin????????????
				set?@i=charindex(@split,@s)????????
				if(@i>0)????????
					begin????????????
						insert?@t(c1)?values(substring(@str,@i-@s))
	????????????????end???????????
	????????????else?
	????????????????begin????????????
						insert?@t(c1)?values(substring(@str,len(@str)-@s+1))????????
	????????????????end????????
				set?@s?=?@i?+?1???????
			end????
	????return
????end





使用的时候如下:

select?*?from?dbo.Func_SplitStringToTable('1,15,13',',');

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读