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)
--方法1:循环截取法
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 @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

 --方法2:使用临时性分拆辅助表法

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

转:aierong原创技术随笔  sqlserver字符串拆分(split)方法汇总

时间: 2024-08-07 08:27:44

sqlserver字符串拆分(split)方法汇总的相关文章

关于字符串的split方法的一些见解

同事今天向笔者提了一个字符串分割的问题,相信许多新手甚至参加工作数年的老鸟会感到奇怪,废话少说直接上实例代码... String source = "1,2,,3,"; String[] strArr = source.split(","); for (String str : strArr) {     System.out.println("[" + str + "]"); } 运行上面一段代码,在控制台可以得到以下输出:

字符串拆分split

public static void main(String[] args) { String s = "A1B2C3D4E5F6G7H8"; String[] arr1 = s.split("[1-8]"); String[] arr2 = s.split("[A-H]");// System.out.println(Arrays.toString(arr1));//[A, B, C, D, E, F, G, H] System.out.pri

sqlserver字符串拆分函数

CREATE FUNCTION f_splitSTR(@s varchar(8000), --待分拆的字符串@split varchar(10) --数据分隔符)RETURNS @re TABLE(col varchar(100))ASBEGIN DECLARE @splitlen int SET @splitlen=LEN(@split+'a')-2 WHILE CHARINDEX(@split,@s)>0 BEGIN INSERT @re VALUES(LEFT(@s,CHARINDEX(@

string.split()与re.split()方法区别

re模块的split()方法与字符串的split()方法相似,前者是根据 正则表达式模式 分隔字符串,后者是根据 固定的字符串 分割,因此与后者相比,显著提升了字符分割的能力. 如果分隔符没有使用由特殊符号表示的正则表达式来匹配多个模式,那 re.split()和 string.split()的执行过程是一样的. string.split()与re.split()方法区别,布布扣,bubuko.com

Python split()方法

描述 Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则仅分隔 num 个子字符串 语法 split() 方法语法: str.split(str="", num=string.count(str)). 参数 str -- 分隔符,默认为所有的空字符,包括空格.换行(\n).制表符(\t)等. num -- 分割次数. 返回值 返回分割后的字符串列表. 实例 以下实例展示了split()函数的使用方法: #!/usr/bin/python str

split()方法

split()方法 描述 split()通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则仅分隔 num+1 个子字符串 语法 split()方法语法: str.split(str="", num=string.count(str)) 参数 str -- 分隔符,默认为所有的空字符,包括空格.换行(\n).制表符(\t)等. num -- 分割次数.默认为 -1, 即分隔所有. 返回值 返回分割后的字符串列表. 实例 以下实例展示了split()函数的使用方法: str =

20190120-自定义实现split方法

1. 实现字符串的split方法Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串 思路同自定义实现replace方法类型: 1.先找出字符串中指定分隔字符的index,考虑可能出现多次的情况使用一个列表split_str_index存储分隔字符的index 2.使用result列表存储分隔后的字符串列表 3.当index不在split_str_index中的的时候拼接字符串,当index在split_str_index中的的

字符串反转方法汇总

split()方法将一个字符串对象的每个字符拆出来,并且将每个字符串当成数组的每个元素 reverse()方法用来改变数组,将数组中的元素倒个序排列,第一个数组元素成为最后一个,最后一个变成第一个 join()方法将数组中的所有元素边接成一个字符串 来看个实例: 1 function reverseString(str) { 2 // 第一步,使用split()方法,返回一个新数组 3 // var splitString = "hello".split("");

32 字符串常用的方法 center find join split lower upper

第八课 字符串中常用的方法:center方法 # 字符串方法:center # 作用是:将字符串在一定的宽度区域内居中显示 # 这个方法和我们之前将的format 中的 ^ 一样 # ^ print("<" + "hello".center(30) + ">") # < hello > # < hello > print("<{:^30}>".format("hello