-sql對字串的處理能力比較弱,比如我要迴圈遍歷象1,2,3,4,5這樣的字串,如果用陣列的話,遍歷很簡單,但是t-sql不支援陣列,所以處理下來比較麻煩。下邊的函式,實現了象陣列一樣去處理字串。
一,用臨時表作為陣列
create
function f_split(@c
varchar(2000),@split
varchar(2
))
returns
@ttable(col varchar(20
))
asbegin
while(charindex(@split,@c)<>
0)
begin
insert
@t(col) values (substring(@c,1,charindex(@split,@c)-
1))
set@c
=stuff(@c,1,charindex(@split,@c),''
)
endinsert
@t(col) values (@c
)
return
endgo
select
*from dbo.f_split('
dfkd,dfdkdf,dfdkf,dffjk
',',
')
drop
function
f_split
col
--------------------
dfkd
dfdkdf
dfdkf
dffjk
(所影響的行數為
4 行)
按指定符號分割字串,返回分割後指定索引的第幾個元素,象陣列一樣方便create
function
get_strarraystrofindex
(@str
varchar(1024), --
要分割的字串
@split
varchar(10), --
分隔符號
@index
int--
取第幾個元素
)returns
varchar(1024)as
begin
declare
@location
intdeclare
@start
intdeclare
@next
intdeclare
@seed
intset
@str
=ltrim(rtrim(@str
))set
@start=1
set@next=1
set@seed
=len(@split
)set
@location
=charindex(@split,@str
)while
@location
<>
0and
@index
>
@next
begin
set@start
=@location
+@seed
set@location
=charindex(@split,@str,@start
)
set@next
=@next+1
endif
@location=0
select
@location
=len(@str)+1--
這兒存在兩種情況:1、字串不存在分隔符號 2、字串中存在分隔符號,跳出while迴圈後,@location為0,那預設為字串後邊有乙個分隔符號。
return
substring(@str,@start,@location
-@start
)end
呼叫示例:
select dbo.get_strarraystrofindex('
8,9,4
',',
',2)
返回值:
9
按指定符號分割字串,返回分割後的元素個數,方法很簡單,就是看字串中存在多少個分隔符號,然後再加一,就是要求的結果。create
function
get_strarraylength
(@str
varchar(1024), --
要分割的字串
@split
varchar(10) --
分隔符號
)returns
intas
begin
declare
@location
intdeclare
@start
intdeclare
@length
intset
@str
=ltrim(rtrim(@str
))set
@location
=charindex(@split,@str
)set
@length=1
while
@location
<>
0begin
set@start
=@location+1
set@location
=charindex(@split,@str,@start
)
set@length
=@length+1
endreturn
@length
end呼叫示例:
select dbo.get_strarraylength('
78,1,2,3
',',
')返回值:4
SQL分割字串
t sql對字串的處理能力比較弱,比如我要迴圈遍歷象1,2,3,4,5這樣的字串,如果用陣列的話,遍歷很簡單,但是t sql不支援陣列,所以處理下來比較麻煩。下邊的函式,實現了象陣列一樣去處理字串。一,用臨時表作為陣列 create function f split c varchar 2000 s...
SQL分割字串
if object id dbo.fn split isnot null drop function dbo.fn split gocreate function dbo.fn split inputstr varchar 8000 seprator varchar 10 returns temp ...
SQL 字串分割函式
create function dbo f split sourcesql varchar 8000 strseprate varchar 10 returns temp table a varchar 100 as begin declare iint set sourcesql rtrim lt...