SQL中实现SPLIT函数几种方法总结

Posted lizengyang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL中实现SPLIT函数几种方法总结相关的知识,希望对你有一定的参考价值。

例1

代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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)[email protected])
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

代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
--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)[email protected]_str_length)
ELSE
IF CHARINDEX(REVERSE(@split_str),REVERSE(@long_str_Tmp))>1
ELSE
SET @[email protected]_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)[email protected]_str_length
SET @long_str_Tmp=REVERSE(SUBSTRING(REVERSE(@long_str_Tmp),1,@[email protected]_str_Position_END))
IF @short_str<>‘‘ Insert INTO @tmp select @short_str
END
END
RETURN
END

例3

Sql2000andSql2005实用的Split函数

代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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函数几种方法总结

 

 

以上是关于SQL中实现SPLIT函数几种方法总结的主要内容,如果未能解决你的问题,请参考以下文章

PyTorch中实现LSTM多步长时间序列预测的几种方法总结(负荷预测)

面试官:你说说 js 中实现继承有哪几种方法?

现代c++中实现精确延时方法总结

MFC画线功能总结

Python字符串分割方法总结

Android中实现延时执行操作的几种方法