--方法0:動態sql法
declare@svarchar(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
''')+
''''
@sql
exec (@sql)
--方法1:迴圈擷取法
ifexists (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
create
function
f_splitstr(
@svarchar(8000), --
待分拆的字串
@split
varchar(10) --
資料分隔符
)returns
@retable(col varchar(100
))as
begin
declare
@splitlen
intset
@splitlen
=len(@split+'
a')-
2while
charindex(@split,@s)>
0begin
insert
@revalues(left(@s,charindex(@split,@s)-1))
set@s=
stuff(@s,1,charindex(@split,@s)+
@splitlen,'')
endinsert
@revalues(@s)
return
endgo
--方法2:使用臨時性分拆輔助表法
ifexists (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
create
function
f_splitstr(
@svarchar(8000), --
待分拆的字串
@split
varchar(10) --
資料分隔符
)returns
@retable(col varchar(100
))as
begin
--建立分拆處理的輔助表(使用者定義函式中只能操作表變數)
declare
@ttable(id int
identity,b bit)
insert
@t(b) select
top8000
0from
syscolumns a,syscolumns b
insert
@reselect
substring(@s,id,charindex(@split,@s
+@split,id)-
id)
from
@twhere id<=
len(@s+'
a')
andcharindex(@split,@split
+@s,id)=id
return
endgo
ifexists (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
ifexists (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
top8000 id=
identity(int,1,1) into
dbo.tb_splitstr
from
syscolumns a,syscolumns b
go--
字串分拆處理函式
create
function
f_splitstr(
@svarchar(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')
andcharindex(@split,@split
+@s,id)=
id)go
createfunction
[dbo
].[ufn_splitstringtotable](
@str
varchar(max
) ,
@split
varchar(10))
returns
table
asreturn
( select
b.id
from ( select
[value]=
convert(xml , ''+
replace(@str , @split , '')
+'')
) a.' , '
varchar(100)')
from a.[
value
].nodes('/v'
) n ( v )
) b)
備註說明:
方法4必須在sql server2005下才可以執行
**aierong原創技術隨筆
sqlserver字串拆分(split)方法彙總
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...