sqlserver中好像没有分割字符串的函数,G哥告诉我,可以自定义,以下内容为抄袭,做个笔记。
第一个是根据下标返回分割结果集中的一个:
--用法:dbo.split(‘要分割的字符串’,’分隔字符’,返回结果集中第几个) --如果没有分隔的字符(第二个参数),则返回整个“要分割的字符串”。 --如果取出的位置超出结果集的下标则返回空。 CREATE FUNCTION [dbo].[split] (@str nvarchar(4000),@code varchar(10),@no int ) RETURNS varchar(200) AS BEGIN declare @intLen int declare @count int declare @indexb int declare @indexe int SET @intLen=len(@code) SET @count=0 SET @indexb=1 IF @no=0 IF charindex(@code,@str,@indexb)<>0 RETURN LEFT(@str,charindex(@code,@str,@indexb)-1) else RETURN @str while charindex(@code,@str,@indexb)<>0 begin SET @count=@count+1 IF @count=@no break SET @indexb=@intLen+charindex(@code,@str,@indexb) end IF @count=@no begin SET @indexe=@intLen+charindex(@code,@str,@indexb) IF charindex(@code,@str,@indexe)<>0 RETURN substring(@str, charindex(@code,@str,@indexb)+len(@code), charindex(@code,@str,@indexe)-charindex(@code,@str,@indexb)-len(@code)) else RETURN RIGHT(@str,len(@str)-charindex(@code,@str,@indexb)-len(@code)+1) end RETURN '' END
第二个是返回分割后的结果集:
--支持分割符多字节 --使用方法 --select * from dbo.split('abc-def-ghi-jkl','-') --select * from dbo.split('abc----def----ghi----jkl','----') ALTER FUNCTION [dbo].[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 WHILE CHARINDEX(@split_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 RETURN END
do u have a twitter
My twitter:@ripflowers,thanks for your visit.