--方法0:動態sql法
declare @s varchar(100),@sql varchar(1000)
set @s='1,2,3,4,5,6,7,8,9,10'
set @sql='select col='''+ replace(@s,',',''' union all select ''')+''''
print @sql
exec (@sql)
if exists (select * from dbo.sysobjects where id = object_id(n'[dbo].[f_splitstr]') and xtype in (n'fn', n'if', n'tf'))
drop function [dbo].[f_splitstr]
go--方法1:迴圈擷取法
create function f_splitstr(
@s varchar(8000), --待分拆的字串
@split varchar(10) --資料分隔符
)returns @re table(col varchar(100))
asbegin
declare @splitlen int
set @splitlen=len(@split+'a')-2
while charindex(@split,@s)>0
begin
insert @re values(left(@s,charindex(@split,@s)-1))
set @s=stuff(@s,1,charindex(@split,@s)+@splitlen,'')
endinsert @re values(@s)
return
endgo
if exists (select * from dbo.sysobjects where id = object_id(n'[dbo].[f_splitstr]') and xtype in (n'fn', n'if', n'tf'))
drop function [dbo].[f_splitstr]
go--方法2:使用臨時性分拆輔助表法
create function f_splitstr(
@s varchar(8000), --待分拆的字串
@split varchar(10) --資料分隔符
)returns @re table(col varchar(100))
asbegin
--建立分拆處理的輔助表(使用者定義函式中只能操作表變數)
declare @t table(id int identity,b bit)
insert @t(b) select top 8000 0 from syscolumns a,syscolumns b
insert @re select substring(@s,id,charindex(@split,@s+@split,id)-id)
from @t
where id<=len(@s+'a')
and charindex(@split,@split+@s,id)=id
return
endgo
if exists (select * from dbo.sysobjects where id = object_id(n'[dbo].[f_splitstr]') and xtype in (n'fn', n'if', n'tf'))
drop function [dbo].[f_splitstr]
goif exists (select * from dbo.sysobjects where id = object_id(n'[dbo].[tb_splitstr]') and objectproperty(id,n'isusertable')=1)
drop table [dbo].[tb_splitstr]
go--方法3:使用永久性分拆輔助表法
--字串分拆輔助表
select top 8000 id=identity(int,1,1) into dbo.tb_splitstr
from syscolumns a,syscolumns b
go--字串分拆處理函式
create function f_splitstr(
@s varchar(8000), --待分拆的字串
@split varchar(10) --資料分隔符
)returns table
asreturn(
select col=cast(substring(@s,id,charindex(@split,@s+@split,id)-id) as varchar(100))
from tb_splitstr
where id<=len(@s+'a')
and charindex(@split,@split+@s,id)=id)
gocreate function [dbo].[ufn_splitstringtotable]
(@str varchar(max) ,
@split varchar(10)
)returns table
as return
( select b.id
from ( select [value] = convert(xml , '' + replace(@str , @split , '
備註說明:
方法4必須在sql server2005下才可以執行
sqlserver字串拆分
1 sql對字串的處理能力比較弱,比如我要迴圈遍歷象1,2,3,4,5這樣的字串,如果用陣列的話,遍歷很簡單,但是t sql不支援陣列 2 自己來實現 create function udf split words nvarchar max 原始字串 splitstr varchar 50 分割字元...
sql server拆分字串
parsename是乙個分隔字串的函式,根據 作為分隔符,快速獲取分解後的部分,通常用來拆分ip位址,通過replace函式也可以靈活拆分其他字串。1 拆分ip位址。select parsename 192.168.0.8 1 輸出8select parsename 192.168.0.8 2 輸出...
sqlserver字串拆分 split 方法彙總
sqlserver字串拆分 split 方法彙總 方法0 動態sql法 declare s varchar 100 sql varchar 1000 set s 1,2,3,4,5,6,7,8,9,10 set sql select col replace s,union all select pr...