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

最新文章

  1. kvm 使用入门详解
  2. Windows Phone 8.1又有什么新花样
  3. SpringAOP实现(原理)
  4. 第一次将内容添加到azure event hubs
  5. RAM与ROM
  6. 细说linux挂载——mount,及其他……
  7. 初尝Windows 下批处理编程
  8. TCP/UDP是如何传输的?
  9. JavaScript学习笔记(高级部分—01)
  10. mutex 和 spinlock 对比
  11. 虚拟机Q&amp;A
  12. js 检测浏览器
  13. js在工作中遇到的一些问题
  14. jmeter 脚本规范
  15. 小实验3:实现haproxy的增、删、查
  16. 用Canvas写一个简单的游戏--别踩白块儿
  17. [Zabbix3.0] 添加MySQL监控
  18. org.springframework.core.io.ClassPathResource类
  19. Metasploit Framework(3)Meterpreter
  20. 玩转Linux服务器常用命令

热门文章

  1. 表单input按钮在各浏览器之间的兼容性
  2. js逻辑与,或,非
  3. Gson 和 Fastjson 你不知道的事
  4. 关于Excel导入的HDR=YES; IMEX=1详解
  5. jQuery实现的瀑布流效果, 向下滚动即时加载内容
  6. js 数组去重 的5种方法
  7. C++的优秀特性5:模版
  8. Leetcode: Longest Palindromic Substring. java
  9. UVALive 4223 Trucking 二分+spfa
  10. script的defer和async