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?????????????????? --要取第幾個數(shù)據(jù),從0開始,如果要返回分割后的數(shù)組列表清刪除--##部分即可
)
returns @temp table (a varchar(200))
as
begin
?declare @i int
?declare @n int? --記錄循環(huán)的次數(shù)
?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
--調(diào)用
declare @s varchar(1000)
set @s='Sa1,Sb1,Sc'
select * from dbo.fn_split(@s,',')
drop function dbo.fn_splitsqlserver中實現(xiàn)split分割字符串函數(shù)
轉(zhuǎn)載于:https://www.cnblogs.com/eastday/archive/2010/04/16/1713851.html
總結(jié)
以上是生活随笔為你收集整理的sqlserver中实现split分割字符串函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EDM HTML编写建议和规范
- 下一篇: MYSQL[35]