短信字符串分拆

原创 2005年04月15日 08:35:00

分拆短信中的数据

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

原帖地址

SQL各种字符串分拆处理函数

字符串分解 --各种字符串分拆处理函数.sql  -- --各种字符串分函数 if exists (select * from dbo.sysobjects...

1、字符串分拆+行转列问题

最近看到一些比较好的SQL帖子,特地转载过来,以后遇到这些问题也好参考参考...

【一个按标志分拆字符串的好方法】strtok函数简介及应用。

刚刚接触strtok函数,感觉十分神奇。 定义: strtok 语法: #include char *strtok( char *str1, const ...

在论坛中出现的比较难的sql问题:1(字符串分拆+行转列问题 SQL遍历截取字符串)

最近,在论坛中,出现了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了,所以,我觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路。 1...
  • yupeigu
  • yupeigu
  • 2013年10月20日 16:55
  • 1573

驱动程序中Irp包的更换与分拆示例

  • 2015年12月05日 00:17
  • 1.37MB
  • 下载

正整数无序分拆算法设计及论证

  • 2012年09月15日 14:51
  • 73KB
  • 下载

分拆TableSplit 让多个mapper同时读取

分拆TableSplit 让多个mapper同时读取 默认情况下,一个region是一个tableSplit,对应一个mapper进行读取,但单mapper读取速度较慢,因此想着...

带有标尺功能的分拆窗口界面

  • 2011年07月05日 20:58
  • 120KB
  • 下载

树形结构和分拆布局

  • 2013年03月14日 09:29
  • 176KB
  • 下载

杭电ACM2098--分拆素数和

题目:http://acm.hdu.edu.cn/showproblem.php?pid=2098   这是源码。其实我本不想拿出源码,毕竟源码很容易被复制。 我这里刚开始出错的地方有 0_0_12...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:短信字符串分拆
举报原因:
原因补充:

(最多只允许输入30个字)