数据库自定义表值函数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 ...
随机推荐
- wpf图片切换,幻灯效果
xaml: <Window x:Class="WpfApplication1.PicShow" xmlns="http://schemas.microsoft.co ...
- linq 动态排序,不使用反射
之前网上搜索的相关方法都是使用了反射的方法来动态获取字段,以实现动态linq排序,但是因为项目组觉得此方法效率低下,所以不予采纳. 所以有了以下代码 public interface IBase{ d ...
- Codeforces Educational Codeforces Round 3 D. Gadgets for dollars and pounds 二分,贪心
D. Gadgets for dollars and pounds 题目连接: http://www.codeforces.com/contest/609/problem/C Description ...
- //判断是否安装Flash插件
//判断是否安装Flash插件 var swf; function IE_Flash() { try { var swf ...
- [AngularJS] Directive Definition Objects (DDO)
This function that we just set up is what's called a link function, and it's actually a very small p ...
- SQL Server 2008 清空删除日志文件
USE [master]GOALTER DATABASE STAR9SQL SET RECOVERY SIMPLE WITH NO_WAITGOALTER DATABASE STAR9SQL SET ...
- 主函数 main WinMain _tmain _tWinMain 的区别
main是C/C++的标准入口函数名 WinMain是windows API窗体程序的入口函数.(int WINAPI WinMain()) 中 WINAPI是__stdcall宏,在windef.h ...
- h5-3
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Linq lamda表达式Single和First方法
让我们来看看如何对一个整数数组使用 Single 操作符.这个整数数组的每个元素代表 2 的 1 到 10 次方.先创建此数组,然后使用 Single 操作符来检索满足 Linq Lambda表达 ...
- PHP手册总结《预定义变量》
一:$_GET GET 是通过 urldecode() 传递的. 二:$_SERVER 这个数组中的项目由 Web 服务器创建.不能保证每个服务器都提供全部项目:服务器可能会忽略一些 三:$argc, ...