又学邹老大算法,模式匹配有重感昌!!!!
2006-09-26 20:27
260 查看
/*==============================================*/
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.5 将数据项按数字与非数字再次拆份
CREATE FUNCTION f_splitSTR(
@s varchar(8000), --待分拆的字符串
@split varchar(10) --数据分隔符
)RETURNS @re TABLE(No varchar(100),Value varchar(20))
AS
BEGIN
--创建分拆处理的辅助表(用户定义函数中只能操作表变量)
DECLARE @t TABLE(ID int IDENTITY,b bit)
INSERT @t(b) SELECT TOP 8000 0 FROM syscolumns a,syscolumns b
INSERT @re
SELECT No=REVERSE(STUFF(col,1,PATINDEX('%[^-^.^0-9]%',col+'a')-1,'')),
Value=REVERSE(LEFT(col,PATINDEX('%[^-^.^0-9]%',col+'a')-1))
FROM(
SELECT col=REVERSE(SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID))
FROM @t
WHERE ID<=LEN(@s+'a')
AND CHARINDEX(@split,@split+@s,ID)=ID)a
RETURN
END
GO
1,本FUNCTION功能如下:‘the big one 123 sex’,把字符放NO,数字放value
2.patindex('%[^-^.^0-9]%',col+'a')------------------查找此模式串(非数字串)在col出现第一个位置,
3,为何要加'a',有这么几种原因,如果是123,不加a,返回0,要是加上,返回1,所以STUFF(col,1,PATINDEX('%[^-^.^0-9]%',col+'a')-1,''))返回' ',那么123到了value,而不是no
4,对于Value=REVERSE(LEFT(col,PATINDEX('%[^-^.^0-9]%',col+'a')-1))
有这么一种思想,the, 返回‘ ’,123,left回3,刚好,+‘a’取出最后一个位置,然后-1, 就是数字的长度
最后结果为123
5,reverse加与不加都可以
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.5 将数据项按数字与非数字再次拆份
CREATE FUNCTION f_splitSTR(
@s varchar(8000), --待分拆的字符串
@split varchar(10) --数据分隔符
)RETURNS @re TABLE(No varchar(100),Value varchar(20))
AS
BEGIN
--创建分拆处理的辅助表(用户定义函数中只能操作表变量)
DECLARE @t TABLE(ID int IDENTITY,b bit)
INSERT @t(b) SELECT TOP 8000 0 FROM syscolumns a,syscolumns b
INSERT @re
SELECT No=REVERSE(STUFF(col,1,PATINDEX('%[^-^.^0-9]%',col+'a')-1,'')),
Value=REVERSE(LEFT(col,PATINDEX('%[^-^.^0-9]%',col+'a')-1))
FROM(
SELECT col=REVERSE(SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID))
FROM @t
WHERE ID<=LEN(@s+'a')
AND CHARINDEX(@split,@split+@s,ID)=ID)a
RETURN
END
GO
1,本FUNCTION功能如下:‘the big one 123 sex’,把字符放NO,数字放value
2.patindex('%[^-^.^0-9]%',col+'a')------------------查找此模式串(非数字串)在col出现第一个位置,
3,为何要加'a',有这么几种原因,如果是123,不加a,返回0,要是加上,返回1,所以STUFF(col,1,PATINDEX('%[^-^.^0-9]%',col+'a')-1,''))返回' ',那么123到了value,而不是no
4,对于Value=REVERSE(LEFT(col,PATINDEX('%[^-^.^0-9]%',col+'a')-1))
有这么一种思想,the, 返回‘ ’,123,left回3,刚好,+‘a’取出最后一个位置,然后-1, 就是数字的长度
最后结果为123
5,reverse加与不加都可以
相关文章推荐
- 第八周项目5-计数的模式匹配
- 用python做含有中文的正则表达式模式匹配
- grep进行模式匹配时扩展符号+的使用
- Redis存储Key的一种设计实现方式:模式匹配
- Lua string(字符串)和强大的模式匹配功能
- 判断字符串是否匹配一定的模式
- Scala 专题教程-Case Class和模式匹配(1):简单的示例
- KMP字符串模式匹配详解
- 模式匹配的问题
- lua中的匹配模式
- Lua学习笔记之字符串及模式匹配
- sql server模式匹配运算下的转义符
- Type、Array、List、Tuple模式匹配实战解析之Scala学习笔记-18
- KMP算法模式匹配
- 串的模式匹配算法(非kmp)
- kmp字符串模式匹配中next函数值的算法
- KMP算法字符串模式匹配
- mySql模式匹配
- 【模式串个数匹配】+ KMP
- KMP字符串模式匹配详解