和同学破解了一个邹老大的短信分拆算法!!!!!!!!!!1
2006-09-28 00:40
316 查看
/*==============================================*/
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
--3.2.6 分拆短信数据
CREATE FUNCTION f_splitSTR(@s varchar(8000)) -----------‘acthebcsex’
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 -----------在串中有分隔符,CIRCLE
BEGIN
SELECT TOP 1
@pos2=CHARINDEX(split,@s,@splitlen+1) ----------@pos2=6
FROM @splits
WHERE CHARINDEX(split,@s,@splitlen+1)>0 ----------------在串中要存在 >=2分隔符
ORDER BY CHARINDEX(split,@s,@splitlen+1)
IF @@ROWCOUNT=0 -------------只有一个分隔符时,如‘acthe’
BEGIN
INSERT @re VALUES(@split,STUFF(@s,1,@splitlen,'')) --------------@re(ac,the)
RETURN
END
ELSE ----------------------------如有2个以上分隔符时@s='acthebcsex'
BEGIN
---------@re(ac,substring('acthebcsex',3,6-3))=(ac,the)
INSERT @re VALUES(@split,SUBSTRING(@s,@splitlen+1,@pos2-@splitlen-1)) ---一步
SELECT TOP 1
---------------------重新送值,@pos1=1,重新进入外面CIRCLE,@split=bc,@s='bcsex' , 又从
@pos1=1,@split=split,@splitlen=splitlen,@s=STUFF(@s,1,@pos2-1,'')--------二步
FROM @splits
WHERE STUFF(@s,1,@pos2-1,'') LIKE split+'%' ----------新子串存在分隔符while>0开始运行,判断一下,执行
-----------一步:@re(bc,sex)
END
END
RETURN
END
GO
1,@s='acthebcsex',结果为;'ac','the' 'bc','sex'
2,我以前的认识以为@split会每次变化,实际上它是表变理任一个都可以的。
3, while 运行一下,从外到里,从里到外又要判断的,不成立退出,加一个return就可以了。
4,insert tablename() select * from tablename 二者的结果集必须一致,才可以传递。
5,多多学习多重CIRCLE的练习。
6,谢啦邹老大的算法。
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
--3.2.6 分拆短信数据
CREATE FUNCTION f_splitSTR(@s varchar(8000)) -----------‘acthebcsex’
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 -----------在串中有分隔符,CIRCLE
BEGIN
SELECT TOP 1
@pos2=CHARINDEX(split,@s,@splitlen+1) ----------@pos2=6
FROM @splits
WHERE CHARINDEX(split,@s,@splitlen+1)>0 ----------------在串中要存在 >=2分隔符
ORDER BY CHARINDEX(split,@s,@splitlen+1)
IF @@ROWCOUNT=0 -------------只有一个分隔符时,如‘acthe’
BEGIN
INSERT @re VALUES(@split,STUFF(@s,1,@splitlen,'')) --------------@re(ac,the)
RETURN
END
ELSE ----------------------------如有2个以上分隔符时@s='acthebcsex'
BEGIN
---------@re(ac,substring('acthebcsex',3,6-3))=(ac,the)
INSERT @re VALUES(@split,SUBSTRING(@s,@splitlen+1,@pos2-@splitlen-1)) ---一步
SELECT TOP 1
---------------------重新送值,@pos1=1,重新进入外面CIRCLE,@split=bc,@s='bcsex' , 又从
@pos1=1,@split=split,@splitlen=splitlen,@s=STUFF(@s,1,@pos2-1,'')--------二步
FROM @splits
WHERE STUFF(@s,1,@pos2-1,'') LIKE split+'%' ----------新子串存在分隔符while>0开始运行,判断一下,执行
-----------一步:@re(bc,sex)
END
END
RETURN
END
GO
1,@s='acthebcsex',结果为;'ac','the' 'bc','sex'
2,我以前的认识以为@split会每次变化,实际上它是表变理任一个都可以的。
3, while 运行一下,从外到里,从里到外又要判断的,不成立退出,加一个return就可以了。
4,insert tablename() select * from tablename 二者的结果集必须一致,才可以传递。
5,多多学习多重CIRCLE的练习。
6,谢啦邹老大的算法。
相关文章推荐
- 短信字符串分拆
- WIN7下破解锐捷无线共享上网(谨以此文献给浙理各位被锐捷搞疯掉的同学)
- 中国专家破解SHA-1,信息安全呼唤新算法
- 世界震惊 美国担心 王小云破解全球两大密码算法
- 短信切割算法
- 暴力破解算法,基本实现
- CrackMe 破解能力测试等级1的完全算法解析
- 某神奇PDF转DOC软件破解算法:
- 专访同学网总裁朱华明:争取年底成为SNS老大
- 中国地图坐标(GCJ-02)偏移算法破解小史
- 短信字符串分拆
- 动易2006序列号破解算法公布
- 网上找来的一个比较好用的3DES,找了很多都有问题。先用着这个吧。再次感谢提供算法的同学
- 算法系列之二十二:离散傅立叶变换之听声音破解电话号码
- Atitit. 破解 拦截 绕过 网站 手机 短信 验证码 方式 v2 attilax 总结
- "岛主" 同学给我出的算法题
- 短信字符串分拆
- 短信字符串分拆
- 寻求下面算法的破解方法
- Python实现破解猜数游戏算法示例