SQL中实现SPLIT函数几种方法总结(必看篇)
例1
代码如下
createfunctionf_split(@SourceSqlvarchar(8000),@StrSepratevarchar(10))
returns@temptable(avarchar(100))
--实现split功能的函数
--date:2003-10-14
as
begin
declare@iint
set@SourceSql=rtrim(ltrim(@SourceSql))
set@i=charindex(@StrSeprate,@SourceSql)
while@i>=1
begin
insert@tempvalues(left(@SourceSql,@i-1))
set@SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
set@i=charindex(@StrSeprate,@SourceSql)
end
if@SourceSql<>''
insert@tempvalues(@SourceSql)
return
end
select*fromdbo.f_split('1,2,3,4',',')
a
--------------------
1
2
3
4
(所影响的行数为4行)
例2
代码如下
--SQLServerSplit函数
--Author:zc_0101
--说明:
--支持分割符多字节
--使用方法
--Select*FROMDBO.F_SQLSERVER_SPLIT('1203401230105045','0')
--select*fromDBO.F_SQLSERVER_SPLIT('abc1234a12348991234','1234')
--Select*fromDBO.F_SQLSERVER_SPLIT('ABC',',')
CREATEFUNCTIONF_SQLSERVER_SPLIT(@Long_strvarchar(8000),@split_strvarchar(100))
RETURNS@tmpTABLE(
IDinTIDENTITYPRIMARYKEY,
short_strvarchar(8000)
)
AS
BEGIN
DECLARE@long_str_Tmpvarchar(8000),@short_strvarchar(8000),@split_str_lengthint
SET@split_str_length=LEN(@split_str)
IFCHARINDEX(@split_str,@Long_str)=1
SET@long_str_Tmp=SUBSTRING(@Long_str,@split_str_length+1,LEN(@Long_str)-@split_str_length)
ELSE
SET@long_str_Tmp=@Long_str
IFCHARINDEX(REVERSE(@split_str),REVERSE(@long_str_Tmp))>1
SET@long_str_Tmp=@long_str_Tmp+@split_str
ELSE
SET@long_str_Tmp=@long_str_Tmp
IFCHARINDEX(@split_str,@long_str_Tmp)=0
InsertINTO@tmpselect@long_str_Tmp
ELSE
BEGIN
WHILECHARINDEX(@spl(www.nhooo.com)it_str,@long_str_Tmp)>0
BEGIN
SET@short_str=SUBSTRING(@long_str_Tmp,1,CHARINDEX(@split_str,@long_str_Tmp)-1)
DECLARE@long_str_Tmp_LENINT,@split_str_Position_ENDint
SET@long_str_Tmp_LEN=LEN(@long_str_Tmp)
SET@split_str_Position_END=LEN(@short_str)+@split_str_length
SET@long_str_Tmp=REVERSE(SUBSTRING(REVERSE(@long_str_Tmp),1,@long_str_Tmp_LEN-@split_str_Position_END))
IF@short_str<>''InsertINTO@tmpselect@short_str
END
END
RETURN
END
例3
Sql2000andSql2005实用的Split函数
代码如下
sql2000
CREATEFUNCTION[dbo].[splitstring_array]
(
@stringnvarchar(4000),@splitchar(1)
)
RETURNS@arraytable
(
oneStrnvarchar(100)
)
AS
BEGIN
declare@v_codevarchar(60)
--zell2006-05-26
--set@string=replace(@string,'',@split)
--set@string=replace(@string,',',@split)
whilelen(@string)>0
begin
ifcharindex(@split,@string,1)!=0
begin
set@v_code=substring(@string,1,charindex(@split,@string,1)-1)
set@string=substring(@string,charindex(@split,@string,1)+1,len(@string))
end
elseifcharindex(@split,@string,1)=0
begin
set@v_code=@string
set@string=''
end
insertinto@array(onestr)values(@v_code)
end
RETURN
END
sql2005
CREATEfunction[dbo].[func_splitid]
(@strvarchar(max),@splitvarchar(10))
RETURNS@tTable(c1nvarchar(100))
AS
BEGIN
DECLARE@xXML
SET@x=CONVERT(XML,'<items><itemid="'+REPLACE(@str,@split,'"/><itemid="')+'"/></items>')
INSERTINTO@tSELECTx.item.value('@id[1]','nvarchar(100)')FROM@x.nodes('//items/item')ASx(item)
RETURN
END
以上这篇SQL中实现SPLIT函数几种方法总结(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。