SQLserver将目标字符串按指定字符分割的表值函数

CREATE FUNCTION [dbo].[up_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

  用法:

 

SELECT FROM dbo.up_splitSTR('root.Mnue01.0101.010102','.')

 

SQLserver将目标字符串按指定字符分割的表值函数_第1张图片

第二种方法

https://www.cnblogs.com/linyc/archive/2011/03/26/1996308.html

例如一个字段[values]的值是:12,35,67,1235,43,87

调用这个函数之后:dbo.f_split(values,',')/*注意:前面记得加 dbo. 我调用的时候因为忘加老是说找不到函数,弄了很久呀*/

结果变成一个表:

[table]

a

--------

12

35

67

1235

43

87

将一个字段分隔为一个表的函数

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

ALTER function [dbo].[f_split](@SourceSql varchar(8000),@StrSeprate varchar(10))

returns @temp table(a varchar(100))

/*--实现split功能 的函数

--date    :2005-4-20

--Author :Domino

*/

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

 

 

你可能感兴趣的:(MSSQL数据库)