sqlserver中实现split分割字符串函数


常用的.

IF OBJECT_ID (N'fn_split') IS NOT NULL
DROP FUNCTION fn_split
go
CREATE function dbo.fn_split
(
@inputstr varchar(8000),
@seprator varchar(10),
@p int --要取第几个数据,从0开始,如果要返回分割后的数组列表清删除--##部分即可
)
returns @temp table (a varchar(200))
as

begin
declare @i int
declare @n int --记录循环的次数
set @inputstr = rtrim(ltrim(@inputstr))
set @i = charindex(@seprator, @inputstr)
SET @n =0 --##

WHILE @i>=1
begin
IF @p=@n --##
begin
insert @temp values(left(@inputstr, @i - 1))
end
set @inputstr = substring(@inputstr, @i + 1, len(@inputstr) - @i)
set @i = charindex(@seprator, @inputstr)
SET @n = @n+1 --##
END

if @inputstr <> '' --最后一位
IF @p=@n --##
insert @temp values(@inputstr)
return
end
go

方法一 
CREATE  FUNCTION uf_StrSplit '1.1.2.50','.'
(@origStr varchar(7000),  --待拆分的字符串
@markStr varchar(100))  --拆分标记,如','
RETURNS @splittable table
(
str_id  varchar(4000) NOT NULL, --编号ID
string  varchar(2000) NOT NULL --拆分后的字符串
)
AS
BEGIN
declare @strlen int,@postion int,@start int,@sublen int,
@TEMPstr varchar(200),@TEMPid int
SELECT @strlen=LEN(@origStr),@start=1,@sublen=0,@postion=1,
@TEMPstr='',@TEMPid=0
if(RIGHT(@origStr,1)<>@markStr )
begin
set @origStr = @origStr + @markStr
end
WHILE((@postion<=@strlen) and (@postion !=0))
BEGIN
IF(CHARINDEX(@markStr,@origStr,@postion)!=0)
BEGIN
SET @sublen=CHARINDEX(@markStr,@origStr,@postion)-@postion;
END
ELSE
BEGIN
SET @sublen=@strlen-@postion+1;
END
IF(@postion<=@strlen)
BEGIN
SET @TEMPid=@TEMPid+1;
SET @TEMPstr=SUBSTRING(@origStr,@postion,@sublen);
INSERT INTO @splittable(str_id,string)
values(@TEMPid,@TEMPstr)
IF(CHARINDEX(@markStr,@origStr,@postion)!=0)
BEGIN
SET @postion=CHARINDEX(@markStr,@origStr,@postion)+1
END
ELSE
BEGIN
SET @postion=@postion+1
END
END
END
RETURN
END
方法二
create function dbo.fn_split
(
@inputstr varchar(8000),
@seprator varchar(10)
)
returns @temp table (a varchar(200))
as

begin
declare @i int

set @inputstr = rtrim(ltrim(@inputstr))
set @i = charindex(@seprator, @inputstr)

while @i >= 1
begin
insert @temp values(left(@inputstr, @i - 1))

set @inputstr = substring(@inputstr, @i + 1, len(@inputstr) - @i)
set @i = charindex(@seprator, @inputstr)
end

if @inputstr <> ''
insert @temp values(@inputstr)

return
end
go

--调用

declare @s varchar(1000)

set @s='Sa1,Sb1,Sc'

select * from dbo.fn_split(@s,',')

drop function dbo.fn_splitsqlserver中实现split分割字符串函数

优质内容筛选与推荐>>
1、sql语句中where与having的区别
2、如何控制DataGrid里的内容换行与不换行
3、安装Subversion1.82(SVN)
4、Discuz数据库结构1
5、2010-05-01至2010-06-01


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号