数据库自定义表值函数Split(@LongStr, @SplitStr, @IsDistinct )
CREATE FUNCTION [dbo].[F3_Split](@LongStr VARCHAR(MAX),@SplitStr VARCHAR(100),@IsDistinct BIT)
RETURNS @RTable TABLE(ID INT IDENTITY PRIMARY KEY,ShortStr VARCHAR(MAX))
AS BEGIN
IF ISNULL(@LongStr,'')='' --表达式为空或NULL直接返回空表
RETURN
IF ISNULL(@SplitStr,'')='' --分隔符为空直接返回一条记录的表(存放表达式)
BEGIN
INSERT INTO @RTable(ShortStr) SELECT @LongStr
RETURN
END
DECLARE @Split_len INT
DECLARE @LongStr_len INT
SET @Split_len=LEN(@SplitStr) --分隔符的长度
SET @LongStr_len=LEN(@LongStr) --目前表达式的长度
WHILE CHARINDEX(@SplitStr,@LongStr)>0
BEGIN
DECLARE @ShortStr VARCHAR(1000) --分割后的字符串
SET @ShortStr=SUBSTRING(@LongStr,1,CHARINDEX(@SplitStr,@LongStr)-1) --每次从第1个位置开始取分隔符所在的位置-1为一截
SET @LongStr=SUBSTRING(@LongStr,CHARINDEX(@SplitStr,@LongStr)+@Split_len,(@LongStr_len-LEN(@ShortStr)-@Split_len)) --变换表达式的值为剩下的
SET @LongStr_len=LEN(@LongStr) --变换表达式的长度
IF @ShortStr<>'' AND @IsDistinct=1
INSERT INTO @RTable(ShortStr) SELECT @ShortStr
WHERE NOT EXISTS(SELECT 1 FROM @RTable WHERE ShortStr=@ShortStr) --将分割出来的字符串放入表中
ELSE IF @ShortStr<>''
INSERT INTO @RTable(ShortStr) SELECT @ShortStr
END
IF @LongStr<>'' AND @IsDistinct=1 --如果最后一截没有分隔符,则直接进入表中
INSERT INTO @RTable(ShortStr) SELECT @LongStr
WHERE NOT EXISTS(SELECT 1 FROM @RTable WHERE ShortStr=@LongStr)
ELSE IF @LongStr<>''
INSERT INTO @RTable(ShortStr) SELECT @LongStr
RETURN
END
数据库自定义表值函数Split(@LongStr, @SplitStr, @IsDistinct )的更多相关文章
- sql server 怎样用select语句调用自定义表值函数
--自定义函数的参数是表的字段,这种情况要用cross apply啦Select B.* FROM [master].[dbo].[分列测试] A cross apply dbo.f_split(应用 ...
- 用程序集编写clr表值函数:把正则表达式引入数据库中
正则表达式非常好,但在数据库中就是没有,但可以通过程序集方式扩展 先编写一个dll,标量函数很好写,表值函数麻烦一点 下面是C#代码 using System; using System.Data; ...
- SQL自定义函数split分隔字符串
SQL自定义函数split分隔字符串 一.F_Split:分割字符串拆分为数据表 Create FUNCTION [dbo].[F_Split] ( @SplitString nvarchar(max ...
- SQL Server自定义字符串分割函数——Split
我相信大部分人都碰到过,处理数据的时候,字段的值是以 ',' (逗号)分隔的形式,所以我也不能避免. 然后我才知道,sql 是没有类似于 C# 和 Javascript 这种分割字符串的方法.( Sp ...
- 表值函数与JS中split()的联系
在公司用云平台做开发就是麻烦 ,做了很多功能或者有些收获,都没办法写博客,结果回家了自己要把大脑里面记住的写出来. split()这个函数我们并不陌生,但是当前台有许多字段然后随意勾选后的这些参数传递 ...
- Oracle使用split和splitstr函数批量分隔字符串
/* * Oracle 创建 split 和 splitstr 函数 */ /* 创建一个表类型 */ ) / /* 创建 split 函数 */ CREATE OR REPLACE FUNCTION ...
- [原创]SQL 表值函数:获取从今天计算起往前自定义天数
PS:此博文是利用Windows Live Writer 2012编写,格式效果可能不太好. 在我开发过程中,遇到一个统计需求,结果是要求返回从当天起往回推算出自定义输入的天数 为此我写了一个表值函数 ...
- [原创]SQL表值函数:获取从当月计算起往前自定义月份数
今天我现在发现看一篇博文不能够太长,只要能够描述清楚自己想表达的东西,能够让大家知道你要讲什么就行了.因为我今天看了一些长篇博文,真的觉得知识点太多了, 会让人囫囵吞枣. 这篇博文跟我昨天发表的类 ...
- sqlserver自定义函数(标量值函数,表值函数)
用户自定义的函数有两类:表值函数.标量值函数. 表值函数:返回值是数据表的函数 调用方式 select b.* from tableA a accross apply Fun_BiaoZhiFun ...
随机推荐
- Backbone
app.js作为backbone 业务代码主模块,内容很简单,在页面加载完之后,对AppView进行了实例化
- 转载:Erlang 资源
Erlang资源 erlang豆瓣广播
- 数据库 SQL :有关 NULL 值引发 TRUE、FALSE、UNKNOW 三值逻辑
在 Java.C# 中,相信如果是 boolean 类型值,只有两种选择 true.false.然而,在 SQL 查询中,NULL 值的引入,使得新增了 UNKNOW ,因此,就产生了 TRUE.FA ...
- C#制作艺术字
相信 Word 中的 艺术字 功能大家都不陌生, 前面这个 "Word" 单词就是它所为. 今天, 我们就利用C#来制作几款自己的艺术字, 可能会对我们了解字体图像的制作原理有一 ...
- IOS学习经验总结--来自知乎网友
转自知乎:http://www.zhihu.com/question/20016551 我当时刚学iOS开发的时候一样的感觉 总想知道原理 内部怎么回事 感觉在像在雾里但是iOS开发就是这样 他是封闭 ...
- hadoop学习笔记之倒排索引
开发工具:eclipse 目标:对下面文档phone_numbers进行倒排索引: 13599999999 1008613899999999 12013944444444 13800138000137 ...
- SmartThreadPool
https://github.com/amibar/SmartThreadPool 首先是实例化的时候的参数的解释 //Initialize SmartThreadPool & Make lo ...
- Java Swing 探索(一)LayoutManager
BorderLayout FlowLayout GridLayout GridBagLayout CardLayout BoxLayout 1.BorderLayout java.lang.Objec ...
- sql server常用知识点
--删除表 use [20130823_Recource] go drop table my_table1,my_table2,My_table3 --创建表 use [20130823_Recour ...
- 云服务器 ECS Linux 误删除文件恢复方法介绍
云服务器 ECS Linux 下,rm -rf 意味着一旦删除的文件是无法挽回的.但如果在没有文件覆盖操作的前提下,可以先尝试相关方式进行文件恢复. 本文对此进行简要说明. https://help ...