zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    《学习之道》第二章学习方法7看视频
    《学习之道》第二章学习6阅读书籍
    反射详解一
    spring 初始化和销毁的三种方法
    文件读取
    JdbcTemplate 详解二
    JdbcTemplate 详解一
    JdbcTemplate 详解三
    常用commons 工具类依赖配置
    java 8 stream
  • 原文地址:https://www.cnblogs.com/maijin/p/4675927.html
Copyright © 2011-2022 走看看