UDF_StringToTable 普通与递归实现
来源:互联网 发布:json文件dw打开乱码 编辑:程序博客网 时间:2024/05/20 14:22
今天闲来无事,写个函数备用。先是用while循环处理,用Table返回
USE RFIDEngGO/************************************************************************* CREATOR:JustinYang DateTime:2016-03-28** FUNCTION:Change a String To Table** USE:SELECT * FROM UDF_StringToTable(',12,;36,;245,',',;')** SELECT * FROM UDF_StringToTable(',12,;36,;245,',',')**************************************************************************/ALTER FUNCTION UDF_StringToTable(@sStr varchar(4000),@SepaOp VARCHAR(5))RETURNS @StringTable TABLE(id int,sSubStr varchar(100))AS BEGIN DECLARE @CurrStr varchar(100) SET @CurrStr = '' DECLARE @i int SET @i = 1 WHILE(len(@sStr)>LEN(@SepaOp)) BEGIN IF (SUBSTRING(@sStr,1,LEN(@SepaOp)) = @SepaOp ) BEGIN SET @sStr = RIGHT(@sStr,LEN(@sStr)-LEN(@SepaOp)) END SET @CurrStr = CASE WHEN CHARINDEX(@SepaOp,@sStr)>0 THEN SUBSTRING(@sStr,1,CHARINDEX(@SepaOp,@sStr)-1) ELSE @sStr END INSERT INTO @StringTable(id,sSubStr) VALUES (@i,@CurrStr) SET @sStr = STUFF(@sStr,CHARINDEX(@CurrStr,@sStr),LEN(@CurrStr),'') SET @i = @i +1 END SET @CurrStr = CASE WHEN CHARINDEX(@SepaOp,@sStr)>0 THEN SUBSTRING(@sStr,1,CHARINDEX(@SepaOp,@sStr)-1) ELSE @sStr END IF(LEN(@CurrStr)>= 1) INSERT INTO @StringTable(id,sSubStr) VALUES (@i,@CurrStr) RETURNEND
再看递归算法:
/************************************************************************* CREATOR:JustinYang DateTime:2016-03-28** FUNCTION:Change a String To Table** USE:SELECT * FROM UDF_StringToTableNew(',12,;36,;245,',',;',0)** SELECT * FROM UDF_StringToTableNew(',12,;36,;245,',',',1)**************************************************************************/CREATE FUNCTION UDF_StringToTableNew(@sStr varchar(4000),@SepaOp VARCHAR(5),@i int = 1)RETURNS @StringTable TABLE(id int,sSubStr varchar(100))AS BEGIN DECLARE @CurrStr varchar(100) SET @CurrStr = '' IF @i< 1 RETURN IF(len(@sStr)>LEN(@SepaOp)) BEGIN IF (SUBSTRING(@sStr,1,LEN(@SepaOp)) = @SepaOp ) BEGIN SET @sStr = RIGHT(@sStr,LEN(@sStr)-LEN(@SepaOp)) END SET @CurrStr = CASE WHEN CHARINDEX(@SepaOp,@sStr)>0 THEN SUBSTRING(@sStr,1,CHARINDEX(@SepaOp,@sStr)-1) ELSE @sStr END INSERT INTO @StringTable(id,sSubStr) VALUES (@i,@CurrStr) SET @sStr = STUFF(@sStr,CHARINDEX(@CurrStr,@sStr),LEN(@CurrStr),'') SET @i = @i +1 INSERT INTO @StringTable ( id, sSubStr ) SELECT id,sSubStr FROM UDF_StringToTableNew(@sStr,@SepaOp,@i) END SET @CurrStr = CASE WHEN CHARINDEX(@SepaOp,@sStr)>0 THEN SUBSTRING(@sStr,1,CHARINDEX(@SepaOp,@sStr)-1) ELSE @sStr END IF(LEN(@CurrStr)>= 1) INSERT INTO @StringTable(id,sSubStr) VALUES (@i,@CurrStr) RETURNEND
此处采用递归处理,批量插入返回的表变量。
1 0
- UDF_StringToTable 普通与递归实现
- 尾递归与普通递归简单解释
- 算法(第4版) 学习笔记二——二分查找的普通实现与递归实现
- 矩阵相乘--递归与非递归实现
- 二分查找递归与非递归实现
- 折半查找递归与非递归实现
- 最大公约数(递归与非递归实现),最小公倍数
- 全排列(递归与非递归实现)
- 单链表反转:递归与非递归实现
- 递归与尾递归的循环实现
- 汉诺塔 递归与非递归实现 (1)
- 汉诺塔 递归与非递归实现 (2)
- 二分查找,递归与非递归实现
- 二叉数前序中序后序递归与非递归实现
- 快速排序递归与非递归实现
- 递归与非递归实现二叉树
- 树的递归与非递归实现
- 归并排序 递归与非递归实现
- Linux环境下sendmail发送html格式正文及csv格式附件邮件
- Linux下安装Eclipse IDE for C/C++ Developers
- 设计模式之原型模式
- JAVA 数组全排列
- 自定义输入法窗口位置
- UDF_StringToTable 普通与递归实现
- 面向对象模式与框架
- 51nod-1003 阶乘后面0的数量
- 利用任务调度特性检测Android模拟器
- Python Built-in Exception
- SpringMVC源码分析系列
- 用户栈&内核栈
- Java参数传递
- centos linux 编译安装pcre软件