--方法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].[ufn_SplitStringToTable] 

  @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下才可以运行

批注: 以上文章引用于 http://www.cnblogs.com/aierong/archive/2008/11/19/sqlserver_split.html

SQL模仿Split 功能的更多相关文章

  1. sql server 实现split功能 行转列

    --實現split功能的函數create function [dbo].[func_split]( @SourceSql varchar(max), @StrSeprate varchar(10))r ...

  2. SQL Server 数据加密功能解析

    SQL Server 数据加密功能解析 转载自: 腾云阁 https://www.qcloud.com/community/article/194 数据加密是数据库被破解.物理介质被盗.备份被窃取的最 ...

  3. SQL Server2016 新功能实时查询统计信息

    SQL Server2016 新功能实时查询统计信息 很多时候有这样的场景,开发抱怨DBA没有调优好数据库,DBA抱怨开发写的程序代码差,因此,DBA和开发都成为了死对头,无法真正排查问题. DBA只 ...

  4. SQL Server 安装 功能详解

    安装 SQL Server 功能     在“功能选择”页上,SQL Server 功能分为以下两个主要部分:实例功能和共享功能. “实例功能”表示为每个实例安装一次的组件,这样,您将具有它们的多个副 ...

  5. SQL Server审计功能入门:SQL Server审核 (SQL Server Audit)

    原文:SQL Server审计功能入门:SQL Server审核 (SQL Server Audit) 介绍 Audit是SQL Server 2008之后才有的功能,它能告诉你"谁什么时候 ...

  6. SQL Server审计功能入门:更改跟踪(Change Tracking)

    原文:SQL Server审计功能入门:更改跟踪(Change Tracking) 介绍 更改跟踪是一种轻量型解决方案,它为应用程序提供了一种有效的更改跟踪机制.常规的,自定义变更跟踪和读取跟踪数据, ...

  7. SQL Server审计功能入门:CDC(Change Data Capture)

    原文:SQL Server审计功能入门:CDC(Change Data Capture) 介绍 SQL Server 2008引入了CDC(Change Data Capture),它能记录: 1. ...

  8. 腾讯云数据库团队:SQL Server 数据加密功能解析

    数据加密是数据库被破解.物理介质被盗.备份被窃取的最后一道防线:数据加密,一方面解决数据被窃取安全问题,另一方面有关法律要求强制加密数据:SQL Server 的数据加密相较于其他数据库,功能相对完善 ...

  9. DB查询分析器7.01新增的周、月SQL执行计划功能

                DB查询分析器7.01新增的周.月SQL执行计划功能 马根峰              (广东联合电子服务股份有限公司, 广州 510300) 1      引言   中国本土 ...

随机推荐

  1. cvCreateCameraCapture

    编辑 本词条缺少信息栏.名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! cvCreateCameraCapture,初始化从摄像头中获取视频,专业名词.   初始化从摄像头中获取视频 ...

  2. Codeforces 696 D. Legen...

    Description 每个字符串有些价值,问生成长度为 \(l\) 的字符串最多能获得多少价值,总字符数不超过 \(200\), \(l\leqslant 10^{14}\) . Sol AC自动机 ...

  3. C#中的日期处理函数

    C#中的日期处理函数 //2013年4月24日 this.TextBox6.Text = System.DateTime.Now.ToString("D"); //2013-4-2 ...

  4. MySQL 5.7 mysqlpump 备份工具说明

    背景: MySQL5.7之后多了一个备份工具:mysqlpump.它是mysqldump的一个衍生,mysqldump就不多说明了,现在看看mysqlpump到底有了哪些提升,可以查看官方文档,这里针 ...

  5. js计算散点图方程式

    //pointArrayX,pointArrayY 为两个数组,分别为x轴对应的点和y轴对应的点 function getEquationPara(pointArrayX, pointArrayY) ...

  6. jQuery 名称冲突

    jQuery 名称冲突 jQuery 使用 $ 符号作为 jQuery 的简介方式. 某些其他 JavaScript 库中的函数(比如 Prototype)同样使用 $ 符号. jQuery 使用名为 ...

  7. iOS 类微信语音播放之切换听筒和扬声器的方法解决方案

    [[UIDevice currentDevice] setProximityMonitoringEnabled:NO];   //建议在播放之前设置yes,播放结束设置NO,这个功能是 //添加监听 ...

  8. Select查询执行顺序

    链接:http://blog.jobbole.com/55086/ 很多程序员视 SQL 为洪水猛兽.SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言.面向对象的程序语 ...

  9. CompletionService/ExecutorCompletionService/线程池/concurrent包

    线程池 线程池的基本思想:线程频繁的创建.销毁会极大地占用系统资源,为了减少系统在创建销毁线程时的开销,线程池应运而生.线程池包括多个已创建的线程,当有任务要在新线程中执行时,将任务提交给线程池,线程 ...

  10. mysql数据库的安装与使用

    ubuntu下面的mysql安装 sudo apt-get install mysql-server 安装后,登陆 mysql -u root -p mysql -h 主机名 -u 用户名 -p -h ...