常用以下三种:

  【1】substring( expression ,start , length );

  【2】CHARINDEX ( expression1 , expression2 [ , start_location ] ) ;

  【3】LEFT(expression,start);

  注意:

  (1)substring中:对于start,负数和0都是空,真正有意义的位置是从" 1 "开始。

  (2)CHARINDEX中:expression1是要到expression2中寻找的字符,start_location是CHARINDEX函数开始在expression2中找expression1的位置。

  (3)LEFT中:表示截取expression的start索引位置左侧的字符串(包括索引位置在内)。

  方法一:动态SQL法

DECLARE @s VARCHAR(50),@sql VARCHAR(300)
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 CREATE FUNCTION f_splitSTR(
@s VARCHAR(8000), --待分拆的字符串
@split VARCHAR(10) --数据分隔符
)RETURNS @re TABLE(col VARCHAR(100))
AS
BEGIN
WHILE CHARINDEX(@split,@s)>0
BEGIN
INSERT @re VALUES(LEFT(@s,CHARINDEX(@split,@s)-1))
--删除目标字符串从start开始length并插入指定字符串
SET @s=STUFF(@s,1,CHARINDEX(@split,@s),'')
--Set @s = Substring(@s, CharIndex(@split,@s)+@splitle, 100)
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 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 va
INSERT @re SELECT SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID)
FROM @t WHERE ID<=LEN(@s) AND CHARINDEX(@split,@s+@split,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 --字符串分拆辅助表
SELECT TOP 8000 ID=IDENTITY(int,1,1) INTO dbo.tb_splitSTR FROM syscolumns a
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) AND CHARINDEX(@split,@s+@split,ID)=ID)
GO

  方法五:利用sql server2005的OUTER APPLY

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 CREATE FUNCTION [dbo].[f_splitSTR]
(
@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
)

SQL字符串分割解析的更多相关文章

  1. SQL 字符串分割表函数

    --字符串分割表函数 ) ) declare @i int; declare @count int; ); ); declare @Index int; )) declare @rowID int; ...

  2. SQL字符串分割转列,Sql列转字符串

    declare @strVar varchar(2000)declare @ResultVar varchar(2000)set @ResultVar='[薄饼],[点心],[海鲜],[酒吧],[楼面 ...

  3. sql字符串分割扩展方法

    可编程性—表值函数 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUNCTION [dbo].[Split] ( @RowData ...

  4. SQL Server 游标运用:鼠标轨迹字符串分割

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 游标模板(Cursor Template) 鼠标轨迹字符串分割SQL脚本实现(SQL Code ...

  5. 学习之路三十六:SQL知识总结 - [游标||字符串分割]

    好久没有写文章了,今天把前不久项目用到的SQL知识总结一下. 一丶字符串分割 SQL内置函数中是没有Split分割函数的,所以需要自己去实现,不多说,上代码: )) RETURNS @result T ...

  6. SQL点滴3—一个简单的字符串分割函数

    原文:SQL点滴3-一个简单的字符串分割函数 偶然在电脑里看到以前保存的这个函数,是将一个单独字符串切分成一组字符串,这里分隔符是英文逗号“,”  遇到其他情况只要稍加修改就好了 CREATE FUN ...

  7. mysql 字符串分割 和 动态执行拼接sql

    本人以前主要用的是MSSQL,最近项目在使用MYSQL,自己是一个 典型的小白.今天就记录一下 一个mysql存储过程,里面需要分割字符串和 动态执行sql语句. 关于字符串 分割我开始使用 LOCA ...

  8. PCB MS SQL表值函数与CLR 表值函数 (例:字符串分割转表)

    将字符串分割为表表经常用到,这里 SQL表值函数与CLR  表值函数,两种实现方法例出来如下: SELECT * FROM FP_EMSDB_PUB.dbo.SqlSplit('/','1oz/1.5 ...

  9. C#为工作Sql而产生的字符串分割小工具(很实用,你值得拥有)

    写在前面 为什么要写这个工具? 工作需要,拼接字符串头晕眼花拼接的,特别是in 查询,后面的参数太多,想在数据执行一些这个sql语句老费劲了. 看正文 工作所有的(后台)攻城狮们都会接触到sql语句, ...

随机推荐

  1. 内存加载DLL

    1.前言 目前很多敏感和重要的DLL(Dynamic-link library) 都没有提供静态版本供编译器进行静态连接(.lib文件),即使提供了静态版本也因为兼容性问题导致无法使用,而只提供DLL ...

  2. iOS内存管理策略和实践

    转:http://www.cocoachina.com/applenews/devnews/2013/1126/7418.html 内存管理策略(memory Management Policy) N ...

  3. iOS sqlite 使用事务操作数据库

    业务层代码: //将解析的更新人员数据批量同步到数据库 +(void)operateCompUsers:(NSMutableArray*)operateCompUsers { sqliteHelper ...

  4. 让Less在Dreamweaver中高亮显示

    装的Dreamweavercs6还是没支持less啊,试过几种方法,感觉还是插件比较直接, 下载插件:http://download.csdn.net/download/lml_231/8556517 ...

  5. 平台升级至spring 4.3.0 运行稳定

    deprecated velocity 部份方法 整理中...

  6. 侏罗纪世界2百度云在线观看迅雷下载高清BT下载

    原名:Jurassic World: Fallen Kingdom 地区:美国 语言:英语 首播:2018-06-15(中国大陆) / 2018-06-22(美国) 电视台: 类型:动作 / 科幻 / ...

  7. SQLite中的增删改查

    虽然android提供了sql查询的封装方法,但是理解起来还是麻烦,所以我这里用sql语句来完成工作. 首先是建立一个类,继承SQLiteOpenHelper 这里面会建立一个数据库,并且初始化一个表 ...

  8. [Web 前端] Jquery实现可直接编辑的表格

    cp from :https://www.cnblogs.com/sjqq/p/6392001.html?utm_source=itdadao&utm_medium=referral 文实例讲 ...

  9. Caffe常用层参数介绍

    版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/Cheese_pop/article/details/52024980 DATA crop:截取原图像中一个 ...

  10. Eclipse国内镜像源配置方法

    Table of Contents 我们在国内从官网下载Eclipse以及插件非常慢,那么,有没有方法变快呢? 有,那就是使用国内的公开镜像源替换官方源. 1 下载Eclipse 首先,我们看一个链接 ...