--方法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. 常用的Mysql数据库操作语句大全

    一.用户管理: 1.新建用户: >CREATE USER name IDENTIFIED BY 'ssapdrow'; 2.更改密码: >SET PASSWORD FOR name=PAS ...

  2. 第2月第6天 iOS 运行时添加属性和方法

    http://blog.csdn.net/meegomeego/article/details/18356169 第一种:runtime.h里的方法 BOOL class_addProperty(Cl ...

  3. 07OC之KVC、KVO

    在OC中,有着很多动态的特性,今天我们着重讲讲OC中的键值编码(KVC)和键值监听(KVO)特性. 一.键值编码(KVC) 在C#中,我们可以通过反射的方式动态去读写一个对象,有时候很方便,因为可以利 ...

  4. java连接oracle范例

    需要引用:ojdbc6.jar import java.sql.*; public class Main { static Connection conn; static Statement stat ...

  5. haproxy测试

    环境: Clients:N台linux, 使用“ab -k -c 20000...” 并发2w 请求haproxy Haproxy Server: R610 2*8核 2.4G Real Server ...

  6. Laravel 创建数据库

    1.根目录输入 php artisan migrate 2.创建表 php artisan migrate:make create_authors_table --table authors --cr ...

  7. jquery图片轮播

    <html> <head> <title>position</title> <style type="text/css"> ...

  8. 【python】继承关系和isinstance

    来源:廖雪峰 继承关系是: object -> Animal -> Dog -> Husky 那么,isinstance()就可以告诉我们,一个对象是否是某种类型.先创建3种类型的对 ...

  9. cisco-log

    每个日志消息被关联一个严重级别,用来分类消息的严重等级:数字越低,消息越严重.严重级别的范围从0(最高)到7(最低).  日志消息的严重级别,使用logging命令可以用数字或者名称来指定严重性.  ...

  10. Java控件(日常笔记)

    Java的一些控件 text:文本区域 readonly属性:是否只读.password:密码区域,输入的文本以'*'展示checkbox:复选框 checked属性:是否选中:radio:单选框: ...