【SQL】sql版Split函数。用于拆分字符串为单列表格

功能与.net版string.Split函数类似,只不过.net返回的是数组,这个返回的是一个单列表格,每个拆分出来的子串占一行。可选是否移除空格子串和重复项。市面上类似的函数不算少,但大多都是在循环中对原串进行改动,我感觉这样不好,虽然不知道sql的字符串是不是像.net的一样具有不可变性,但感觉尽量不要去动原串最好,万一sql的字串也不可变,那变一次就要产生一份,尤其是每圈循环都在变,内存消耗让人心疼,所以才有重新造个轮子的想法。

另外,如果SQL开启了CLR支持,完全可以封装一个.net的Split到SQL里用,这样最简单,性能也应该更好(猜测)。不废话,上函数:

/*-------------------------------
函数:拆分字符串到单列表格v0.02
Author:AhDung
Update:201403251158
-------------------------------*/
ALTER FUNCTION dbo.Split(
@s VARCHAR(8000),             --要拆分的字符串
@separator NVARCHAR(10),      --分隔符。最长支持10个字符的分隔符
@removeEmpty BIT,             --是否移除空格项目。不处理制表符、回车换行
@unique BIT                   --是否移除重复项
)
RETURNS @t TABLE (S VARCHAR(500)) AS
BEGIN
  IF @s IS NULL RETURNIF CHARINDEX(@separator,@s)=0BEGIN INSERT @t VALUES(LEFT(@s,250)) RETURN ENDSET @s += @separator --仅对原串做一次改动。其实一次不改也行,但需要在循环中加判断。这样是为了在CPU和内存消耗之间取平衡DECLARE @lenS INT = LEN(@s),@lenSptr INT = DATALENGTH(@separator)/2,@i INT=0,@tmp NVARCHAR(250),@nextSptrIndex INTWHILE @i < @lenSBEGINSET @nextSptrIndex=CHARINDEX(@separator,@s,@i+1)SET @tmp=SUBSTRING(@s,@i+1,@nextSptrIndex-1-@i)INSERT INTO @t VALUES(@tmp)SET @i+=DATALENGTH(@tmp)/2+@lenSptrENDIF @removeEmpty=1BEGINDELETE @t WHERE S=''ENDIF @unique=1BEGINWITH cteA AS (SELECT ROW_NUMBER() OVER(PARTITION BY S ORDER BY S) AS 'ID' FROM @t)DELETE cteA WHERE ID<>1ENDRETURN
END

文毕!

posted on 2014-03-25 11:53 ahdung 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/ahdung/p/3622808.html

【SQL】sql版Split函数。用于拆分字符串为单列表格相关推荐

  1. java split空字符_java split函数结尾空字符串被丢弃的问题

    java中的split函数用于将字符串分割为字符数组是很方便的,但由于不是很熟悉,犯了错误 如下: String strtest = "1,2,"; String arry[] = ...

  2. Python使用numpy函数vsplit垂直(行角度)拆分numpy数组(返回拆分后的numpy数组列表)实战:垂直拆分二维numpy数组、split函数垂直拆分二维numpy数组

    Python使用numpy函数vsplit垂直(行角度)拆分numpy数组(返回拆分后的numpy数组列表)实战:垂直拆分二维numpy数组.split函数垂直拆分二维numpy数组 目录

  3. Java中用split函数进行分割字符串。

    Java中用split函数进行分割字符串. 1.语法如下 String.split(sourceStr,maxSplit) String.split(sourceStr) 参数说明:sourceStr ...

  4. 编写一个函数用于去除字符串中多余的空格,,

    编写一个函数用于去除字符串中多余的空格,比如字符串"a  b    c",处理后为"a b c" public class StringManipulation ...

  5. 【Kotlin】字符串操作 ① ( 截取字符串函数 substring | 拆分字符串函数 split | 解构语法特性 )

    文章目录 一.截取字符串函数 substring 二.拆分字符串函数 split 一.截取字符串函数 substring Kotlin 中提供了 截取字符串函数 substring , 可接收 Int ...

  6. SQL Server实现split函数分割字符串功能及用法示例

    select (select RealName+',' from Fmis_User where fmis_User.Code in (select * FROM dbo.f_SplitToNvarc ...

  7. SQL 自定SPLIT函数的实际运用

    --当表中FarmAgriculturalName字段中包含'.'字符时,返回以字符串分割后的表数据数量(取分割后的临时表中长度  > 1 的数据),条件为FarmAgriculturalNam ...

  8. Oracle字符拆分函数,Oracle拆分字符串函数有哪些呢?

    以"指定字符串"进行拆分,并通过表结构返回结果.代码如下: CREATE OR REPLACE TYPE str_split IS TABLE OF VARCHAR2 (4000) ...

  9. 【Python入门教程】第81篇 常用字符串方法之拆分字符串

    本篇将会介绍如何利用字符串对象的 split() 方法将一个字符串拆分成多个子串. 字符串 split() 方法 字符串的 split() 方法用于拆分字符串,返回一个由子串组成的列表.split() ...

最新文章

  1. Fedora 15 安装与配置一览
  2. 添加linux系统调用的两种方式
  3. 【Linux】30.ssh不用手动输入密码登录终端sshpass 和 shell脚本后跟参数自动匹配case的用法
  4. C++kruskals算法生成最小协议树(附完整源码)
  5. C# 9 新特性:代码生成器、编译时反射
  6. python控制浏览器导出数据_Django导出数据为Excel,调用浏览器下载
  7. Linux shell中的那些小把戏
  8. 详解Python类定义中的各种方法
  9. 深度学习在NLP领域的发展(一)
  10. C++程序设计基础(揣锦华版)课后习题答案-第一章:程序设计基础知识
  11. 【Python CI】圈复杂度 lizard
  12. CE6 CPU 使用率
  13. STM32开发笔记03---Bit-Banding
  14. 真空灾难:物理学最著名的未解难题之一
  15. CMAKE_INSTALL_PREFIX
  16. 将mysql中时间类型的字段导入hive中遇到的坑(时间错啦)
  17. python中咕噜咕噜的冒泡函数
  18. 2021春哈工大计算机系统大作业
  19. 8个Python工具,用来做应用程序开发真的很好用
  20. 小红书种草推广,产品怎么在小红书推广

热门文章

  1. html节点上下移动,关于前端:数组元素上下移动
  2. 商品pid是什么意思_0基础搞懂自动驾驶传统算法与深度学习的鸿沟-PID控制算法与MLP优化方法...
  3. matlab mat文件
  4. 位运算实例(一):判断奇偶性
  5. 国家普通话水平智能测试软件,国家普通话水平智能测试系统注意事项
  6. 西安单招学校学计算机软件的,西北大学软件职业技术学院单招
  7. 产品经理经验谈:与产品经理有关的100件小事儿~
  8. 大数相加c语言思路,大数相加
  9. 龙芯2h芯片不能进入pmon_“龙芯”18年:这个团队,终结了中国计算机产业的“无芯”历史...
  10. 计算机应用昨早领域,计算机应用-第1章.ppt