SQL中实现SPLIT函数几种方法总结(必看篇)

例1

代码如下

create function f_split(@SourceSql varchar(8000),@StrSeprate varchar(10))
returns @temp table(a varchar(100))
--实现split功能 的函数
--date :2003-10-14
as
begin
declare @i int
set @SourceSql=rtrim(ltrim(@SourceSql))
set @i=charindex(@StrSeprate,@SourceSql)
while @i>=1
begin
insert @temp values(left(@SourceSql,@i-1))
set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
set @i=charindex(@StrSeprate,@SourceSql)
end
if @SourceSql<>''
insert @temp values(@SourceSql)
return
end

select * from dbo.f_split('1,2,3,4',',')

a
--------------------
1
2
3
4

(所影响的行数为 4 行)

例2

代码如下

--SQL Server Split函数
--Author:zc_0101
--说明:
--支持分割符多字节
--使用方法
--Select * FROM DBO.F_SQLSERVER_SPLIT('1203401230105045','0')
--select * from DBO.F_SQLSERVER_SPLIT('abc1234a12348991234','1234')
--Select * from DBO.F_SQLSERVER_SPLIT('ABC',',') 

CREATE FUNCTION F_SQLSERVER_SPLIT(@Long_str varchar(8000),@split_str varchar(100))
RETURNS @tmp TABLE(
ID inT IDENTITY PRIMARY KEY,
short_str varchar(8000)
)
AS
BEGIN
DECLARE @long_str_Tmp varchar(8000),@short_str varchar(8000),@split_str_length int
SET @split_str_length = LEN(@split_str)
IF CHARINDEX(@split_str,@Long_str)=1
SET @long_str_Tmp=SUBSTRING(@Long_str,@split_str_length+1,LEN(@Long_str)-@split_str_length)
ELSE
SET @long_str_Tmp=@Long_str
IF CHARINDEX(REVERSE(@split_str),REVERSE(@long_str_Tmp))>1
SET @long_str_Tmp=@long_str_Tmp+@split_str
ELSE
SET @long_str_Tmp=@long_str_Tmp
IF CHARINDEX(@split_str,@long_str_Tmp)=0
Insert INTO @tmp select @long_str_Tmp
ELSE
BEGIN
WHILE CHARINDEX(@spl(www.jb51.net)it_str,@long_str_Tmp)>0
BEGIN
SET @short_str=SUBSTRING(@long_str_Tmp,1,CHARINDEX(@split_str,@long_str_Tmp)-1)
DECLARE @long_str_Tmp_LEN INT,@split_str_Position_END int
SET @long_str_Tmp_LEN = LEN(@long_str_Tmp)
SET @split_str_Position_END = LEN(@short_str)+@split_str_length
SET @long_str_Tmp=REVERSE(SUBSTRING(REVERSE(@long_str_Tmp),1,@long_str_Tmp_LEN-@split_str_Position_END))
IF @short_str<>'' Insert INTO @tmp select @short_str
END
END
RETURN
END

例3

Sql2000andSql2005实用的Split函数

代码如下

sql2000
CREATE FUNCTION [dbo].[splitstring_array]
(
@string nvarchar(4000),@split char(1)
) 

RETURNS @array table
(
oneStr nvarchar(100)
) 

AS

BEGIN
declare @v_code varchar(60) 

--zell 2006-05-26
--set @string = replace(@string,' ',@split)
--set @string = replace(@string,',',@split) 

while len(@string) > 0
begin
if charindex(@split,@string,1) != 0
begin
set @v_code = substring(@string,1,charindex(@split,@string,1)-1)
set @string = substring(@string,charindex(@split,@string,1)+1,len(@string))
end
else if charindex(@split,@string,1) = 0
begin
set @v_code = @string
set @string = ''
end
insert into @array(onestr) values(@v_code)
end
RETURN
END

sql2005
CREATE function [dbo].[func_splitid]
(@str varchar(max),@split varchar(10))
RETURNS @t Table (c1 nvarchar(100))
AS
BEGIN
DECLARE @x XML
SET @x = CONVERT(XML,'<items><item id="' + REPLACE(@str, @split, '"/><item id="') + '"/></items>')
INSERT INTO @t SELECT x.item.value('@id[1]', 'nvarchar(100)') FROM @x.nodes('//items/item') AS x(item)
RETURN
END

以上这篇SQL中实现SPLIT函数几种方法总结(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

时间: 2016-09-04

sql实现split函数的脚本

复制代码 代码如下: --创建一个函数,函数中有两个参数 Create FUNCTION [dbo].[SplitToTable](@SplitString nvarchar(max),--输入的字符串@Separator nvarchar(10)=' '--分割条件)--返回的数据为一个表RETURNS @SplitStringsTable TABLE([id] int identity(1,1),[value] nvarchar(max))ASBEGINDECLARE @CurrentInd

给Oracle添加split和splitstr函数的方法

最近项目中有很多需要做批量操作的需求,客户端把一组逗号分隔的ID字符串传给数据库,存储过程就需要把它们分割,然后逐个处理. 以往的处理方式有如下几种: 1.在存储过程内写循环,逐个分析字符串中的ID,然后逐个处理.缺点:循环一次处理一个,如果每次判断都很多,效率将很受影响.适合每次处理要做单独判断的情况. 2.使用临时表,先调用一个存储过程将ID拆分并插入到临时表中,然后结合临时表可以写SQL一次处理多笔.缺点:需要插临时表,效率不高,数据量越大影响越严重. 以前的项目用的最多的还是第2中方式,

MySQL里实现类似SPLIT的分割字符串的函数

下边的函数,实现了象数组一样去处理字符串. 一,用临时表作为数组 复制代码 代码如下: create function f_split(@c varchar(2000),@split varchar(2)) returns @t table(col varchar(20)) as begin while(charindex(@split,@c)<>0) begin insert @t(col) values (substring(@c,1,charindex(@split,@c)-1)) se

SQL里类似SPLIT的分割字符串函数

一,用临时表作为数组 复制代码 代码如下: create function f_split(@c varchar(2000),@split varchar(2)) returns @t table(col varchar(20)) as begin while(charindex(@split,@c)<>0) begin insert @t(col) values (substring(@c,1,charindex(@split,@c)-1)) set @c = stuff(@c,1,char

php指定长度分割字符串str_split函数用法示例

本文实例讲述了php指定长度分割字符串str_split函数用法.分享给大家供大家参考,具体如下: 示例1: $str = 'abcdefgh'; $arr = str_split($str,2); 运行结果如下: array(4) { [0]=> string(2) "ab" [1]=> string(2) "cd" [2]=> string(2) "ef" [3]=> string(2) "gh"

在Python中用split()方法分割字符串的使用介绍

split()方法返回的字符串中的所有单词的列表,使用str作为分隔符(如果在未指定的所有空格分割),可选择限当前分割为数量num. 语法 以下是split()方法的语法: str.split(str="", num=string.count(str)). 参数 str -- 这是任何分隔符,默认情况下是空格. num -- 这是要分割的行数. 返回值 此方法返回行列表. 例子 下面的示例演示了split()方法的使用. #!/usr/bin/python str = "Li

python 按照固定长度分割字符串的方法小结

有如下的一堆mac地址,需要更改成一定格式,如mac='902B345FB021'改为mac='90-2B-34-5F-B0-21'. 借助python脚本,可以轻松实现,原理就是:字符串的按照固定长度拆分. 1,文件mac.txt,保存了如下的mac地址: 50E549E32ECB 902B3413EFA6 50E549ECBA1C 902B3457B16F 1C6F65296DF9 902B34131A14 50E549E3E2F8 50E5493A2696 902B345FB021 902

PHP5 字符串处理函数大全

addcslashes - 为字符串里面的部分字符添加反斜线转义字符 addslashes - 用指定的方式对字符串里面的字符进行转义 bin2hex - 将二进制数据转换成十六进制表示 chop - rtrim() 的别名函数 chr - 返回一个字符的ASCII码 chunk_split - 按一定的字符长度将字符串分割成小块 convert_cyr_string - 将斯拉夫语字符转换为别的字符 convert_uudecode - 解密一个字符串 convert_uuencode - 加

js split 的用法和定义 js split分割字符串成数组的实例代码

关于js split的用法其它也不多说什么,下面直接举例给大家看看 复制代码 代码如下: <script language="javascript"> str="2,2,3,5,6,6"; //这是一字符串 var strs= new Array(); //定义一数组 strs=str.split(","); //字符分割 for (i=0;i<strs.length ;i++ ) { document.write(strs[i

js中通过split函数分割字符串成数组小例子

复制代码 代码如下: <script language="javascript"> str="2,2,3,5,6,6"; //这是一字符串 var strs= new Array(); //定义一数组 strs=str.split(","); //字符分割 for (i=0;i<strs.length ;i++ ) { document.write(strs[i]+"<br/>"); //分割后的

SQL Server实现split函数分割字符串功能及用法示例

本文实例讲述了SQL Server实现split函数分割字符串功能及用法.分享给大家供大家参考,具体如下: /* 函数名称:f_SplitToNvarchar 作用:实现split功能的函数 更新记录: 设计思路:将nvarchar类型字符结合的一个串,分隔到一张只有一列nvarchar类型的表里 */ CREATE FUNCTION [dbo].[f_SplitToNvarchar] ( @SourceSql NVARCHAR(MAX),--源分隔字符串 @StrSeprate VARCHAR

java 中用split分割字符串,最后的空格等不被拆分的方法

在使用java中的split按照"\t",拆分字符串的时候,发现如果最后的几个字段是空,只是用\t分割,是连着的\t的话,就不会被分割,如 "d\tc\te\t\t\t"最后的几个\t就不会被分割,应该是在拆分之前对字符串进行了处理. 导致的拆分字段个数错误.查了一下APi,需要在split中添加参数-1,String[] values = line.split("\t",-1); imit 参数控制应用模式的次数,从而影响结果数组的长度 如果限