分拆簡訊中的資料
/*--問題描述
根據自定義資訊字首表(每個資訊字首可以看作是乙個資訊分隔符)進行字串分拆處理的函式,在分拆處理函式中,首先定義了乙個資訊前緣表@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
原帖位址
簡訊字串分拆
分拆簡訊中的資料 問題描述 根據自定義資訊字首表 每個資訊字首可以看作是乙個資訊分隔符 進行字串分拆處理的函式,在分拆處理函式中,首先定義了乙個資訊前緣表 splits,表中包含了ac bc cc dc四個資訊字首 實際使用時,可以在函式中新增其他資訊前緣,也可以定義乙個正式表來儲存資訊字首資料,這...
簡訊字串分拆
分拆簡訊中的資料 問題描述 根據自定義資訊字首表 每個資訊字首可以看作是乙個資訊分隔符 進行字串分拆處理的函式,在分拆處理函式中,首先定義了乙個資訊前緣表 splits,表中包含了ac bc cc dc四個資訊字首 實際使用時,可以在函式中新增其他資訊前緣,也可以定義乙個正式表來儲存資訊字首資料,這...
簡訊字串分拆
分拆簡訊中的資料 問題描述 根據自定義資訊字首表 每個資訊字首可以看作是乙個資訊分隔符 進行字串分拆處理的函式,在分拆處理函式中,首先定義了乙個資訊前緣表 splits,表中包含了ac bc cc dc四個資訊字首 實際使用時,可以在函式中新增其他資訊前緣,也可以定義乙個正式表來儲存資訊字首資料,這...