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
  • 相关阅读:
    PHP的文件下载
    ajax异步请求分页显示
    Linux的启动过程
    搭建nginx反向代理用做内网域名转发
    intellij idea 修改背景保护色&&修改字体&&快捷键大全
    IDEA入门级使用教程-
    http://blog.csdn.net/baidu_31657889/article/details/52315902
    JVM——Java虚拟机架构
    MySQL远程连接ERROR 2003 (HY000):Can't connect to MySQL server on'XXXXX'(111) 的问题
    windows上 nginx 配置代理服务,配置多域名,以及最简单实现跨域配置
  • 原文地址:https://www.cnblogs.com/maijin/p/4675927.html
Copyright © 2011-2022 走看看