sqlserver字串拆分 split 方法彙總

2021-09-07 08:00:10 字數 2810 閱讀 2276

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

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