sqlserver字串拆分 split 方法彙總

2021-09-08 19:19:29 字數 3923 閱讀 1129

--方法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

''')+

''''

print

@sql

exec (@sql)

--方法1:迴圈擷取法
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

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:使用臨時性分拆輔助表法

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

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

create

function

[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...