当前位置: 首页 > news >正文

sqlserver字符串拆分(split)方法汇总

--方法0:动态SQL法 declare @s varchar(100),@sql varchar(1000) set @s='1,2,3,4,5,6,7,8,9,10' set @sql='select col='''+ replace(@s,',',''' union all select ''')+'''' PRINT @sql exec (@sql) if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF')) drop function [dbo].[f_splitSTR] GO --方法1:循环截取法 CREATE FUNCTION f_splitSTR( @s varchar(8000), --待分拆的字符串 @split varchar(10) --数据分隔符 )RETURNS @re TABLE(col varchar(100)) AS BEGIN DECLARE @splitlen int SET @splitlen=LEN(@split+'a')-2 WHILE CHARINDEX(@split,@s)>0 BEGIN INSERT @re VALUES(LEFT(@s,CHARINDEX(@split,@s)-1)) SET @s=STUFF(@s,1,CHARINDEX(@split,@s)+@splitlen,'') END INSERT @re VALUES(@s) RETURN END GO if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF')) drop function [dbo].[f_splitSTR] GO --方法2:使用临时性分拆辅助表法 CREATE FUNCTION f_splitSTR( @s varchar(8000), --待分拆的字符串 @split varchar(10) --数据分隔符 )RETURNS @re TABLE(col varchar(100)) AS BEGIN --创建分拆处理的辅助表(用户定义函数中只能操作表变量) DECLARE @t TABLE(ID int IDENTITY,b bit) INSERT @t(b) SELECT TOP 8000 0 FROM syscolumns a,syscolumns b INSERT @re SELECT SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID) FROM @t WHERE ID<=LEN(@s+'a') AND CHARINDEX(@split,@split+@s,ID)=ID RETURN END GO if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF')) drop function [dbo].[f_splitSTR] GO if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tb_splitSTR]') and objectproperty(id,N'IsUserTable')=1) drop table [dbo].[tb_splitSTR] GO --方法3:使用永久性分拆辅助表法 --字符串分拆辅助表 SELECT TOP 8000 ID=IDENTITY(int,1,1) INTO dbo.tb_splitSTR FROM syscolumns a,syscolumns b GO --字符串分拆处理函数 CREATE FUNCTION f_splitSTR( @s varchar(8000), --待分拆的字符串 @split varchar(10) --数据分隔符 )RETURNS TABLE AS RETURN( SELECT col=CAST(SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID) as varchar(100)) FROM tb_splitSTR WHERE ID<=LEN(@s+'a') AND CHARINDEX(@split,@split+@s,ID)=ID) GO --方法4:利用sql server2005的OUTER APPLY CREATE FUNCTION [dbo].[fn_Split] ( @str VARCHAR(MAX) , @split VARCHAR(10) ) RETURNS TABLE AS RETURN ( SELECT B.id FROM ( SELECT [value] = CONVERT(XML , '<v>' + REPLACE(@str , @split , '</v><v>') + '</v>') ) A OUTER APPLY ( SELECT id = N.v.value('.' , 'varchar(100)') FROM A.[value].nodes('/v') N ( v ) ) B ) 备注说明: 方法4必须在sql server2005下才可以运行

——————————————————————————————————————————

在本人看来, 方法4最值得使用。

Example:

SELECT id FROM fn_Split('a,b,d,c',',')




相关文章:

  • Pycharm配置autopep8让Python代码更符合pep8规范
  • Union和Union All到底有什么区别
  • SQL——多行并成一行显示, 以字符串分隔(相当于C#中的join)
  • angular1.5 与 angular5 组件的对比
  • maven搭建ssm框架是使用最新mysql 6.0jar遇到的问题
  • 新旧数据ICD的整合
  • linux-ftp install
  • 总结2011,展望2012
  • [ZJOI 2014]力
  • 不辜负每一个日出——Leo2012寄语
  • 微信小程序笔记
  • 索引以及索引缓冲区
  • Case when用法
  • Opencv 编译
  • Python2.7-copy_reg
  • 【面试系列】之二:关于js原型
  • HTTP 简介
  • Javascript基础之Array数组API
  • JavaScript新鲜事·第5期
  • Less 日常用法
  • MySQL用户中的%到底包不包括localhost?
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • SpiderData 2019年2月25日 DApp数据排行榜
  • V4L2视频输入框架概述
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 基于webpack 的 vue 多页架构
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 前端技术周刊 2019-01-14:客户端存储
  • 如何用vue打造一个移动端音乐播放器
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (论文阅读40-45)图像描述1
  • ../depcomp: line 571: exec: g++: not found
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • @JsonSerialize注解的使用
  • @RequestMapping-占位符映射
  • [2013][note]通过石墨烯调谐用于开关、传感的动态可重构Fano超——
  • [2018-01-08] Python强化周的第一天
  • [28期] lamp兄弟连28期学员手册,请大家务必看一下
  • [Angular] 笔记 18:Angular Router
  • [BZOJ4337][BJOI2015]树的同构(树的最小表示法)