原文:
sql server 自定義字串分割函式
一、按指定符號分割字串,返回分割後的元素個數,方法很簡單,就是看字串中存在多少個分隔符號,然後再加一,就是要求的結果(標量值函式)
1create
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
二、按指定符號分割字串,返回分割後指定索引的第幾個元素,象陣列一樣方便(標量值函式)
1create
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
三、結合上邊兩個函式,像陣列一樣遍歷字串中的元素(錶值函式)
1create
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
另一種方式(錶值函式):
1create
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,若為單位元組則長度...