sqlserver几个好用的表值函数和标量函数

获取逗号风格的字符串中的某一个

比如'1,2,4,5,6' 第三个就是4

CREATE function [dbo].[Get_StrArrayStrOfIndex]
(
  @str nvarchar(max),  --要分割的字符串
  @split varchar(10),  --分隔符号
  @index int --取第几个元素
)
returns varchar(1024)
as
begin
  declare @location int
  declare @start int
  declare @next int
  declare @seed int

  set @str=ltrim(rtrim(@str))
  set @start=1
  set @next=1
  set @seed=len(@split)
  
  set @location=charindex(@split,@str)
  while @location<>0 and @index>@next
  begin
    set @start=@location+@seed
    set @location=charindex(@split,@str,@start)
    set @next=@next+1
  end
  if @location =0 select @location =len(@str)+1
 --这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。
  
  return substring(@str,@start,@location-@start)
end
GO

获取逗号分隔的字符串的个数

CREATE function [dbo].[Get_StrArrayLength]
(
  @str nvarchar(max),  --要分割的字符串
  @split varchar(10)  --分隔符号
)
returns int
as
begin
  declare @location int
  declare @start int
  declare @length int

  set @str=ltrim(rtrim(@str))
  set @location=charindex(@split,@str)
  set @length=1
  while @location<>0
  begin
    set @start=@location+1
    set @location=charindex(@split,@str,@start)
    set @length=@length+1
  end
  return @length
end

GO

按照某个符号分割字符串 翻来一张表

CREATE  FUNCTION  [dbo].[SplitStringToTable] 
(  
     @String  nvarchar(4000),  --格式如:“1,2,3,4,”
     @SplitChar  nvarchar(10)  --分割的字符:“,”
)  
RETURNS    @table  Table(ID  varchar(100))  
AS  
BEGIN  
   DECLARE  @Index  INT  
   SET  @Index  =  0  

        IF @String <> ''
        Begin
            IF RIGHT(@String,1)<> @SplitChar 
                SET @String = @String + @SplitChar
            IF LEFT(@String,1)= @SplitChar 
            SET @String = STUFF(@String, 1, 1, '')
        End
 
       WHILE  CHARINDEX(@SplitChar,@String,@Index)  >  0    
       BEGIN  
           INSERT INTO @table(ID)
               VALUES (SUBSTRING(@String, @Index, CHARINDEX(@SplitChar, @String,
                @Index) - @Index))
               SET @index = CHARINDEX(@SplitChar, @String, @Index) + 1 END  
RETURN  
END
GO
原文地址:https://www.cnblogs.com/maijin/p/4675927.html