【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
文毕!
转载于:https://www.cnblogs.com/ahdung/p/3622808.html
【SQL】sql版Split函数。用于拆分字符串为单列表格相关推荐
- java split空字符_java split函数结尾空字符串被丢弃的问题
java中的split函数用于将字符串分割为字符数组是很方便的,但由于不是很熟悉,犯了错误 如下: String strtest = "1,2,"; String arry[] = ...
- Python使用numpy函数vsplit垂直(行角度)拆分numpy数组(返回拆分后的numpy数组列表)实战:垂直拆分二维numpy数组、split函数垂直拆分二维numpy数组
Python使用numpy函数vsplit垂直(行角度)拆分numpy数组(返回拆分后的numpy数组列表)实战:垂直拆分二维numpy数组.split函数垂直拆分二维numpy数组 目录
- Java中用split函数进行分割字符串。
Java中用split函数进行分割字符串. 1.语法如下 String.split(sourceStr,maxSplit) String.split(sourceStr) 参数说明:sourceStr ...
- 编写一个函数用于去除字符串中多余的空格,,
编写一个函数用于去除字符串中多余的空格,比如字符串"a b c",处理后为"a b c" public class StringManipulation ...
- 【Kotlin】字符串操作 ① ( 截取字符串函数 substring | 拆分字符串函数 split | 解构语法特性 )
文章目录 一.截取字符串函数 substring 二.拆分字符串函数 split 一.截取字符串函数 substring Kotlin 中提供了 截取字符串函数 substring , 可接收 Int ...
- SQL Server实现split函数分割字符串功能及用法示例
select (select RealName+',' from Fmis_User where fmis_User.Code in (select * FROM dbo.f_SplitToNvarc ...
- SQL 自定SPLIT函数的实际运用
--当表中FarmAgriculturalName字段中包含'.'字符时,返回以字符串分割后的表数据数量(取分割后的临时表中长度 > 1 的数据),条件为FarmAgriculturalNam ...
- Oracle字符拆分函数,Oracle拆分字符串函数有哪些呢?
以"指定字符串"进行拆分,并通过表结构返回结果.代码如下: CREATE OR REPLACE TYPE str_split IS TABLE OF VARCHAR2 (4000) ...
- 【Python入门教程】第81篇 常用字符串方法之拆分字符串
本篇将会介绍如何利用字符串对象的 split() 方法将一个字符串拆分成多个子串. 字符串 split() 方法 字符串的 split() 方法用于拆分字符串,返回一个由子串组成的列表.split() ...
最新文章
- Fedora 15 安装与配置一览
- 添加linux系统调用的两种方式
- 【Linux】30.ssh不用手动输入密码登录终端sshpass 和 shell脚本后跟参数自动匹配case的用法
- C++kruskals算法生成最小协议树(附完整源码)
- C# 9 新特性:代码生成器、编译时反射
- python控制浏览器导出数据_Django导出数据为Excel,调用浏览器下载
- Linux shell中的那些小把戏
- 详解Python类定义中的各种方法
- 深度学习在NLP领域的发展(一)
- C++程序设计基础(揣锦华版)课后习题答案-第一章:程序设计基础知识
- 【Python CI】圈复杂度 lizard
- CE6 CPU 使用率
- STM32开发笔记03---Bit-Banding
- 真空灾难:物理学最著名的未解难题之一
- CMAKE_INSTALL_PREFIX
- 将mysql中时间类型的字段导入hive中遇到的坑(时间错啦)
- python中咕噜咕噜的冒泡函数
- 2021春哈工大计算机系统大作业
- 8个Python工具,用来做应用程序开发真的很好用
- 小红书种草推广,产品怎么在小红书推广
热门文章
- html节点上下移动,关于前端:数组元素上下移动
- 商品pid是什么意思_0基础搞懂自动驾驶传统算法与深度学习的鸿沟-PID控制算法与MLP优化方法...
- matlab mat文件
- 位运算实例(一):判断奇偶性
- 国家普通话水平智能测试软件,国家普通话水平智能测试系统注意事项
- 西安单招学校学计算机软件的,西北大学软件职业技术学院单招
- 产品经理经验谈:与产品经理有关的100件小事儿~
- 大数相加c语言思路,大数相加
- 龙芯2h芯片不能进入pmon_“龙芯”18年:这个团队,终结了中国计算机产业的“无芯”历史...
- 计算机应用昨早领域,计算机应用-第1章.ppt