sql 自定義函式擷取字串

2022-05-06 14:48:11 字數 2766 閱讀 8163

--sql對字串的處理能力比較弱,比如我要迴圈遍歷象1,2,3,4,5這樣的字串,如果用陣列的話,遍歷很簡單,但是t-sql不支援陣列,所以處理下來比較麻煩。下邊的函式,實現了象陣列一樣去處理字串。

一,用臨時表作為陣列

create function f_split(@c varchar(2000),@split varchar(2))

returns @t table(col varchar(20))

as

begin

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),'')

end

insert @t(col) values (@c)

return

end

go

select * from dbo.f_split('dfkd,dfdkdf,dfdkf,dffjk',',')

drop function f_split

col

--------------------

dfkd

dfdkdf

dfdkf

dffjk

(所影響的行數為 4 行)

二、按指定符號分割字串,返回分割後的元素個數,方法很簡單,就是看字串中存在多少個分隔符號,然後再加一,就是要求的結果。

create function get_strarraylength

( @str varchar(1024), --要分割的字串

@split varchar(10) --分隔符號

)returns int

asbegin

declare @location int

declare @start int

declare @length int

set @str=ltrim(rtrim(@str))

set @location=charindex(@split,@str)

set @length=1

while @location<>0

begin

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

三、按指定符號分割字串,返回分割後指定索引的第幾個元素,象陣列一樣方便

create function get_strarraystrofindex

( @str varchar(1024), --要分割的字串

@split varchar(10), --分隔符號

@index int --取第幾個元素

)returns varchar(1024)

asbegin

declare @location int

declare @start int

declare @next int

declare @seed int

set @str=ltrim(rtrim(@str))

set @start=1

set @next=1

set @seed=len(@split)

set @location=charindex(@split,@str)

while @location<>0 and @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

三、結合上邊兩個函式,象陣列一樣遍歷字串中的元素

declare @str varchar(50)

set @str='1,2,3,4,5'

declare @next int

set @next=1

while @next<=dbo.get_strarraylength(@str,',')

begin

print dbo.get_strarraystrofindex(@str,',',@next)

set @next=@next+1

end呼叫結果:12

345

SQL擷取字串函式

a.擷取從字串左邊開始n個字元 以下是 片段 declare s1 varchar 100 select s1 select left s1,4 顯示結果 http b.擷取從字串右邊開始n個字元 例如取字元www.163.com 以下是 片段 declare s1 varchar 100 sele...

SQL擷取字串函式

這裡介紹三種擷取函式。left string,length 函式 從字串string中,從第乙個字元開始,自左向右,擷取長度為length的子串。舉個例子,string為 abcdefg length為3,那麼擷取的子串就是 abc 了。right string,length 函式 與上面函式類似,...

SQL擷取字串函式

a.擷取從字串左邊開始n個字元 declare s1 varchar 100 select s1 select left s1,4 顯示結果 http b.擷取從字串右邊開始n個字元 例如取字元www.163.com declare s1 varchar 100 select s1 select r...