zoukankan      html  css  js  c++  java
  • TSQL 定义分割字符串的函数

    一、按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果。

    CREATE function Get_StrArrayLength

    (

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

      @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

    调用示例:select dbo.Get_StrArrayLength('78,1,2,3',',')

    返回值:4

    二、按指定符号分割字符串,返回分割后指定索引的第几个元素,象数组一样方便

    CREATE function Get_StrArrayStrOfIndex

    (

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

      @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

    调用示例:select dbo.Get_StrArrayStrOfIndex('8,9,4',',',2)

    返回值:9

    三、结合上边两个函数,象数组一样遍历字符串中的元素

    create   function   f_splitstr(@SourceSql   varchar(8000),@StrSeprate   varchar(100))   

      returns   @temp   table(F1   varchar(100))   

      as     

      begin   

      declare   @ch   as   varchar(100)   

      set   @SourceSql=@SourceSql+@StrSeprate     

      while(@SourceSql<>'')   

                      begin   

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

      insert   @temp   values(@ch)   

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

                      end   

      return   

      end   

        

    ----调用

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

    --结果:

    1

    2

    3

    4

  • 相关阅读:
    webpack基础
    LeetCode232. 用栈实现队列做题笔记
    mysql 时间加减一个月
    leetcode 1381. 设计一个支持增量操作的栈 思路与算法
    LeetCode 141. 环形链表 做题笔记
    leetcode 707. 设计链表 做题笔记
    leetcode 876. 链表的中间结点 做题笔记
    leetcode 143. 重排链表 做题笔记
    leetcode 1365. 有多少小于当前数字的数字 做题笔记
    LeetCode1360. 日期之间隔几天 做题笔记
  • 原文地址:https://www.cnblogs.com/encounter/p/2188779.html
Copyright © 2011-2022 走看看