`
wsql
  • 浏览: 12130447 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

短信字符串分拆

阅读更多

分拆短信中的数据

/*--问题描述
根据自定义信息前缀表(每个信息前缀可以看作是一个信息分隔符)进行字符串分拆处理的函数,在分拆处理函数中,首先定义了一个信息前缘表@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))
AS
BEGIN
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
END
ELSE
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+'%'
END
END
RETURN
END
GO

原帖地址

分享到:
评论

相关推荐

    利用CMPP\SGIP协议发送长短信发送格式说明

    超长短信编码需要首先把 TP_udhi 的值设置设置为 1,在消息正文中增加协议头,然后在每条超长短信分割而成的短信中增加协议头,协议头分两种,分别是长度为 6 和长度为 7 的协议头。具体配置如下:CMPP 协议 SUBMIT ...

    sqlserver2000基础(高手也有用)

    3.5 字符串分拆与合并处理应用实例 74 3.5.1 字符串比较 74 3.5.2 字符串交集/并集 75 3.5.3 分拆字符串并统计 78 3.5.4 借用字符串实现无规律排序 82 3.5.5 列车车次查询 82 3.6 字符串在动态Transact...

    SQL SERVER 2000开发与管理应用实例

    3.5 字符串分拆与合并处理应用实例 74 3.5.1 字符串比较 74 3.5.2 字符串交集/并集 75 3.5.3 分拆字符串并统计 78 3.5.4 借用字符串实现无规律排序 82 3.5.5 列车车次查询 82 3.6 字符串在动态...

    EditText 输入仿发短信选择多个联系人,

    此外,为了实现“得到块代表的字符串集合”,我们需要维护一个内部数据结构,比如ArrayList,用于存储每个文本块的值。 描述中的“支持校验”意味着我们需要实现输入验证机制,比如检查每个联系人是否有效,这可以...

    Oracle P/L SQL实现发送Email、浏览网页等网络操作功能

    --字符串加解密,返回一串32位长的字符串 --Select UTL_INet.f_MD5( 'TestPassword' ) From Dual; Function f_MD5( as_SourceStr in Varchar2 --需要加密的字符串 ) Return Varchar2; --将Email地址...

    vc++ 应用源码包_1

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_2

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_6

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_5

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_3

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 开发实例源码包

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

Global site tag (gtag.js) - Google Analytics