簡訊字串分拆

2021-08-29 11:36:52 字數 2046 閱讀 2220

分拆簡訊中的資料

/*--問題描述

根據自定義資訊字首表(每個資訊字首可以看作是乙個資訊分隔符)進行字串分拆處理的函式,在分拆處理函式中,首先定義了乙個資訊前緣表@splits,表中包含了ac、bc、cc、dc四個資訊字首(實際使用時,可以在函式中新增其他資訊前緣,也可以定義乙個正式表來儲存資訊字首資料,這樣就可以實現使用者自定義資訊字首資料的處理)。它的分拆處理過程是這樣的:

(1) 在簡訊字串中,每個資訊都是以指定的資訊字首開頭,後面緊跟該字首包含的資訊,所以首先獲取簡訊字串中,第乙個資訊字首字串及它的長度,如果簡訊字串不是以某個資訊字首開頭,則說明不是乙個正確的簡訊字串,直接返回空的結果集。

(2) 獲取第乙個資訊字首後的第乙個資訊字首位置。

(3) 如果該資訊字首不存在,則表明是最後一段資訊,將該段資訊插入結果集並且退出函式。

(4) 如果該資訊字首存在,則通過該位置擷取當前資訊段,將擷取的資訊段儲存到結果集,然後從簡訊字串中刪除已經分拆的資訊段,迴圈從(1)開始處理,直到分拆完所有的資訊。

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/*--字串分函式

根據自定義分隔符列表,分拆指定分隔符的的字串,返回結果表

--鄒建 2005.04(引用請保留此資訊)--*/

/*--呼叫示例

select * from f_splitstr(n'ac中國bc898cc美國人日本人dc中8c餓飯')

--*/

create function f_splitstr(@s varchar(8000))

returns @re table(split varchar(10),value varchar(100))

asbegin

declare @splits table(split varchar(10),splitlen as len(split))

insert @splits(split)

select 'ac' union all

select 'bc' union all

select 'cc' union all

select 'dc'

declare @pos1 int,@pos2 int,@split varchar(10),@splitlen int

select top 1

@pos1=1,@split=split,@splitlen=splitlen

from @splits

where @s like split+'%'

while @pos1>0

begin

select top 1

@pos2=charindex(split,@s,@splitlen+1)

from @splits

where charindex(split,@s,@splitlen+1)>0

order by charindex(split,@s,@splitlen+1)

if @@rowcount=0

begin

insert @re values(@split,stuff(@s,1,@splitlen,''))

return

endelse

begin

insert @re values(@split,substring(@s,@splitlen+1,@pos2-@splitlen-1))

select top 1

@pos1=1,@split=split,@splitlen=splitlen,@s=stuff(@s,1,@pos2-1,'')

from @splits

where stuff(@s,1,@pos2-1,'') like split+'%'

endend

return

endgo

原帖位址

trackback:

簡訊字串分拆

分拆簡訊中的資料 問題描述 根據自定義資訊字首表 每個資訊字首可以看作是乙個資訊分隔符 進行字串分拆處理的函式,在分拆處理函式中,首先定義了乙個資訊前緣表 splits,表中包含了ac bc cc dc四個資訊字首 實際使用時,可以在函式中新增其他資訊前緣,也可以定義乙個正式表來儲存資訊字首資料,這...

簡訊字串分拆

分拆簡訊中的資料 問題描述 根據自定義資訊字首表 每個資訊字首可以看作是乙個資訊分隔符 進行字串分拆處理的函式,在分拆處理函式中,首先定義了乙個資訊前緣表 splits,表中包含了ac bc cc dc四個資訊字首 實際使用時,可以在函式中新增其他資訊前緣,也可以定義乙個正式表來儲存資訊字首資料,這...

簡訊字串分拆

分拆簡訊中的資料 問題描述 根據自定義資訊字首表 每個資訊字首可以看作是乙個資訊分隔符 進行字串分拆處理的函式,在分拆處理函式中,首先定義了乙個資訊前緣表 splits,表中包含了ac bc cc dc四個資訊字首 實際使用時,可以在函式中新增其他資訊前緣,也可以定義乙個正式表來儲存資訊字首資料,這...