当前位置:首页> 正文

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

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

SET @[email protected]_str

IF CHARINDEX(REVERSE(@split_str),REVERSE(@long_str_Tmp))>1

SET @[email protected][email protected]_str

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 /><item /></items>‘ )

INSERT INTO @t SELECT x.item.value( ‘@id[1]‘ , ‘nvarchar(100)‘ ) FROM @x.nodes( ‘//items/item‘ ) AS x(item)

RETURN

END

以上这篇SQL中实现SPLIT函数几种方法总结

展开全文阅读

相关内容