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' , '.' ) |
第二种方法
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 |