zoukankan      html  css  js  c++  java
  • SQL SERVER 分割字符串等操作(转)

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

    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
  • 相关阅读:
    linux驱动开发学习一:创建一个字符设备
    如何高效的对有序数组去重
    找到缺失的第一个正整数
    .NET不可变集合已经正式发布
    中国人唯一不认可的成功——就是家庭的和睦,人生的平淡【转】
    自己动手搭建 MongoDB 环境,并建立一个 .NET HelloWorld 程序测试
    ASP.NET MVC 中如何用自定义 Handler 来处理来自 AJAX 请求的 HttpRequestValidationException 错误
    自己动手搭建 Redis 环境,并建立一个 .NET HelloWorld 程序测试
    ServiceStack 介绍
    一步一步实战扩展 ASP.NET Route,实现小写 URL、个性化 URL
  • 原文地址:https://www.cnblogs.com/allen76615519/p/2563795.html
Copyright © 2011-2022 走看看