SQL Server 自定義字串分割函式

2021-09-06 23:30:04 字數 4354 閱讀 8768

原文:

sql server 自定義字串分割函式

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

1

create

function

func_strarraylength

2(

3@str

varchar(1024), --

要分割的字串

4@split

varchar(10) --

分隔符號

5)

6returns

int7as8

begin

9declare

@location

int10

declare

@start

int11

declare

@length

int12

13set

@str

=ltrim(rtrim(@str

))

14set

@location

=charindex(@split,@str

) 15

set@length=1

16while

@location

<>017

begin

18set

@start

=@location+1

19set

@location

=charindex(@split,@str,@start

) 20

set@length

=@length+1

21end

22return

@length

23end

24go

呼叫示例:select dbo.func_strarraylength('78,1,2,3',',')  

返回值:4  

二、按指定符號分割字串,返回分割後指定索引的第幾個元素,象陣列一樣方便(標量值函式)

1

create

function

func_strarraystrofindex

2(

3@str

varchar(1024), --

要分割的字串

4@split

varchar(10), --

分隔符號

5@index

int--

取第幾個元素

6)

7returns

varchar(1024

) 8as9

begin

10declare

@location

int11

declare

@start

int12

declare

@next

int13

declare

@seed

int14

15set

@str

=ltrim(rtrim(@str

))

16set

@start=1

17set

@next=1

18set

@seed

=len(@split

) 19

20set

@location

=charindex(@split,@str

) 21

while

@location

<>

0and

@index

>

@next

22begin

23set

@start

=@location

+@seed

24set

@location

=charindex(@split,@str,@start

) 25

set@next

=@next+1

26end

27if

@location=0

select

@location

=len(@str)+128

--這兒存在兩種情況:、字串不存在分隔符號2、字串中存在分隔符號,跳出while迴圈後,@location為,那預設為字串後邊有乙個分隔符號。

2930

return

substring(@str,@start,@location

-@start

) 31

end32

go

呼叫示例:select dbo.func_strarraystrofindex('8,9,4',',',2)  

返回值:9  

三、結合上邊兩個函式,像陣列一樣遍歷字串中的元素(錶值函式)

1

create

function func_splitstr(@sourcesql

varchar(8000), @strseprate

varchar(100

))

2returns

@temp

table(f1 varchar(100

)) 3as

4begin

5declare

@chas

varchar(100

)

6set

@sourcesql

=@sourcesql

+@strseprate

7while(@sourcesql

<>

'')

8begin

9set

@ch=left(@sourcesql,charindex('

,',@sourcesql,1)-

1)

10insert

@temp

values(@ch

)

11set

@sourcesql

=stuff(@sourcesql,1,charindex('

,',@sourcesql,1),''

)

12end

13return

14end

15go

----呼叫 

select * from dbo.func_splitstr('1,2,3,4',',')   

--結果: 

1  2  

3  4  

另一種方式(錶值函式):

1

create

function func_splitstr(@str

nvarchar(2000),@split

nvarchar(2))2

returns

@ttable(accountcodeid int)3

as4begin

5declare

@tmpaccountcodeid

int,@getindex

int6

set@getindex

=charindex('

,',@str)7

while(@getindex

<>

0)

8begin

9set

@tmpaccountcodeid

=convert(int,substring(@str,1,@getindex-1

))10

insert

into

@t(accountcodeid) values (@tmpaccountcodeid)11

set@str

=stuff(@str,1,@getindex,'')12

set@getindex

=charindex('

,',@str

)

13end

14insert

into

@t(accountcodeid) values (@str)15

return

16end

17go

----呼叫 

select * from dbo.func_splitstr('1,2,3,4',',')   

--結果: 

1  2  

3  4 

自定義字串排序

字串s和 t 只包含小寫字元。在s中,所有字元只會出現一次。s 已經根據某種規則進行了排序。我們要根據s中的字元順序對t進行排序。更具體地說,如果s中x在y之前出現,那麼返回的字串中x也應出現在y之前。返回任意一種符合條件的字串t。示例 輸入 s cba t abcd 輸出 cbad 解釋 s 現了...

自定義屬性字串

nsattributedstring ios6以後才有的 作用用來顯示自定義字串 顏色 字型 大小 uilabel label uilabel alloc initwithframe cgrectmake 0,100,320,40 label.text 你好 label.textcolor uico...

自定義截字串方法

問題描述 編寫乙個擷取字串的函式,輸入為乙個字串和位元組數,輸出為按位元組擷取的字串。但是要保證漢字不被截半個,如 我abc 4,應該截為 我ab 輸入 我abc漢def 6,應該輸出為 我abc 而不是 我abc 漢的半個 解決方法 對輸入的字串進行遍歷,若為雙位元組則長度為2,若為單位元組則長度...