天天看點

T-SQL 定義分割字元串的函數

一、按指定符号分割字元串,傳回分割後的元素個數,方法很簡單,就是看字元串中存在多少個分隔符号,然後再加一,就是要求的結果。

T-SQL 定義分割字元串的函數
T-SQL 定義分割字元串的函數

create function get_strarraylength

T-SQL 定義分割字元串的函數

(

T-SQL 定義分割字元串的函數

  @str varchar(1024),  --要分割的字元串

T-SQL 定義分割字元串的函數

  @split varchar(10)  --分隔符号

T-SQL 定義分割字元串的函數

)

T-SQL 定義分割字元串的函數

returns int

T-SQL 定義分割字元串的函數

as

T-SQL 定義分割字元串的函數

begin

T-SQL 定義分割字元串的函數

  declare @location int

T-SQL 定義分割字元串的函數

  declare @start int

T-SQL 定義分割字元串的函數

  declare @length int

T-SQL 定義分割字元串的函數
T-SQL 定義分割字元串的函數

  set @str=ltrim(rtrim(@str))

T-SQL 定義分割字元串的函數

  set @location=charindex(@split,@str)

T-SQL 定義分割字元串的函數

  set @length=1

T-SQL 定義分割字元串的函數

  while @location<>0

T-SQL 定義分割字元串的函數

  begin

T-SQL 定義分割字元串的函數

    set @start=@location+1

T-SQL 定義分割字元串的函數

    set @location=charindex(@split,@str,@start)

T-SQL 定義分割字元串的函數

    set @length=@length+1

T-SQL 定義分割字元串的函數

  end

T-SQL 定義分割字元串的函數

  return @length

T-SQL 定義分割字元串的函數

end

T-SQL 定義分割字元串的函數

調用示例:select dbo.get_strarraylength('78,1,2,3',',')

T-SQL 定義分割字元串的函數

傳回值:4

T-SQL 定義分割字元串的函數
T-SQL 定義分割字元串的函數

二、按指定符号分割字元串,傳回分割後指定索引的第幾個元素,象數組一樣友善

T-SQL 定義分割字元串的函數
T-SQL 定義分割字元串的函數

create function get_strarraystrofindex

T-SQL 定義分割字元串的函數
T-SQL 定義分割字元串的函數
T-SQL 定義分割字元串的函數

  @split varchar(10),  --分隔符号

T-SQL 定義分割字元串的函數

  @index int --取第幾個元素

T-SQL 定義分割字元串的函數
T-SQL 定義分割字元串的函數

returns varchar(1024)

T-SQL 定義分割字元串的函數
T-SQL 定義分割字元串的函數
T-SQL 定義分割字元串的函數
T-SQL 定義分割字元串的函數
T-SQL 定義分割字元串的函數

  declare @next int

T-SQL 定義分割字元串的函數

  declare @seed int

T-SQL 定義分割字元串的函數
T-SQL 定義分割字元串的函數
T-SQL 定義分割字元串的函數

  set @start=1

T-SQL 定義分割字元串的函數

  set @next=1

T-SQL 定義分割字元串的函數

  set @seed=len(@split)

T-SQL 定義分割字元串的函數
T-SQL 定義分割字元串的函數
T-SQL 定義分割字元串的函數

  while @location<>0 and @index>@next

T-SQL 定義分割字元串的函數
T-SQL 定義分割字元串的函數

    set @start=@location+@seed

T-SQL 定義分割字元串的函數
T-SQL 定義分割字元串的函數

    set @next=@next+1

T-SQL 定義分割字元串的函數
T-SQL 定義分割字元串的函數

  if @location =0 select @location =len(@str)+1

T-SQL 定義分割字元串的函數

 --這兒存在兩種情況:1、字元串不存在分隔符号 2、字元串中存在分隔符号,跳出while循環後,@location為0,那預設為字元串後邊有一個分隔符号。

T-SQL 定義分割字元串的函數
T-SQL 定義分割字元串的函數

  return substring(@str,@start,@location-@start)

T-SQL 定義分割字元串的函數
T-SQL 定義分割字元串的函數

調用示例:select dbo.get_strarraystrofindex('8,9,4',',',2)

T-SQL 定義分割字元串的函數

傳回值:9

T-SQL 定義分割字元串的函數
T-SQL 定義分割字元串的函數

三、結合上邊兩個函數,象數組一樣周遊字元串中的元素

T-SQL 定義分割字元串的函數
T-SQL 定義分割字元串的函數

create   function   f_splitstr(@sourcesql   varchar(8000),@strseprate   varchar(100))   

T-SQL 定義分割字元串的函數

  returns   @temp   table(f1   varchar(100))   

T-SQL 定義分割字元串的函數

  as     

T-SQL 定義分割字元串的函數

  begin   

T-SQL 定義分割字元串的函數

  declare   @ch   as   varchar(100)   

T-SQL 定義分割字元串的函數

  set   @sourcesql=@sourcesql+@strseprate     

T-SQL 定義分割字元串的函數

  while(@sourcesql<>'')   

T-SQL 定義分割字元串的函數

                  begin   

T-SQL 定義分割字元串的函數

                  set   @ch=left(@sourcesql,charindex(',',@sourcesql,1)-1)   

T-SQL 定義分割字元串的函數

  insert   @temp   values(@ch)   

T-SQL 定義分割字元串的函數

  set   @sourcesql=stuff(@sourcesql,1,charindex(',',@sourcesql,1),'')   

T-SQL 定義分割字元串的函數

                  end   

T-SQL 定義分割字元串的函數

  return   

T-SQL 定義分割字元串的函數

  end   

T-SQL 定義分割字元串的函數
T-SQL 定義分割字元串的函數
T-SQL 定義分割字元串的函數

----調用

T-SQL 定義分割字元串的函數

  select   *   from   dbo.f_splitstr('1,2,3,4',',') 

T-SQL 定義分割字元串的函數

--結果:

T-SQL 定義分割字元串的函數

1

T-SQL 定義分割字元串的函數

2

T-SQL 定義分割字元串的函數

3

T-SQL 定義分割字元串的函數

4