zoukankan      html  css  js  c++  java
  • Sql实现Split

    create function [dbo].[Get_StrArrayLength]
    (
     @str varchar(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)
     --设置分隔后的字符串长度为1
     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

     drop function [dbo].[Get_StrArrayStrOfIndex]
    go
    create function [dbo].[Get_StrArrayStrOfIndex]
    (
     @str varchar(max),  --要分割的字符串
     @split varchar(10),  --分隔符号
     @index int --取第几个元素
    )
    returns varchar(1024)
    as
    begin
     declare @location int
     declare @start int
     declare @next int
     declare @seed int
     declare @pos int
     if @index<=0
     return ''
     set @str=ltrim(rtrim(@str))
     set @start=1
     set @next=1
     set @pos=1
     set @seed=len(@split)
     set @location=charindex(@split,@str)
     while @location<>0 and @index>@next and @pos<@index
     begin
       set @start=@location+@seed
       set @location=charindex(@split,@str,@start)
       set @next=@next+1
       set @pos=@pos+1
     end
     if @location =0
     if @pos<>@index
      return ''
     else
      select @location =len(@str)+1
    --这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。
     return substring(@str,@start,@location-@start)
    end

    declare @id varchar(30)
    select @id=dbo.Get_StrArrayStrOfIndex('4321,2223,333,5554',',',2)

    我的改进版本,可像Hashtable一样访问

    drop function [dbo].[Get_ArrayStrOfName]
    Go

    create function [dbo].[Get_ArrayStrOfName]
    (
        @str varchar(5000),  --要分割的字符串
        @split varchar(1),  --分隔符号
        @itemSplit varchar(1), --元素分割符
        @item varchar(20)   --取哪个元素
    )
    returns varchar(1024)
    As
    Begin
        declare @location int            --找到子串的位置
        declare @tempItem varchar(50)        --当前项
        declare @tempItemName varchar(20)    --当前项的名称
        set @str=ltrim(rtrim(@str))
        set @tempItem=''
        set @tempItemName=''
    while len(@str)>0
    Begin
        -----找到一个子项--
        set @location=charindex(@split,@str,1)
        if @location>0
            Begin
                    set @tempItem=substring(@str,1,@location-1)
                    set @str=substring(@str,@location+1,len(@str))
            End
        Else
            Begin
                set @tempItem=@str
                set @str=''
            end    
        ----------判断当前子项的名称--------------
        set @location=charindex(@itemSplit,@tempItem,1)
        if @location>0
            Begin
                set @tempItemName=substring(@tempItem,1,@location-1)
                if  @tempItemName=@item
                    return substring(@tempItem,@location+1,len(@tempItem))
            End
    End
        return ''
    End
    Go

    declare @id varchar(30)
    select @id=dbo.Get_ArrayStrOfName('ff@4321,ffg@2223,ggg@333,ddd@5554', ',', '@', 'ff')
    print @id

  • 相关阅读:
    Why Choose Jetty?
    Jetty 的工作原理以及与 Tomcat 的比较
    Tomcat设计模式
    Servlet 工作原理解析
    Tomcat 系统架构
    spring boot 打包方式 spring boot 整合mybaits REST services
    wireshark udp 序列号 User Datagram Protocol UDP
    Maven 的聚合(多模块)和 Parent 继承
    缓存策略 半自动化就是mybaitis只支持数据库查出的数据映射到pojo类上,而实体到数据库的映射需要自己编写sql语句实现,相较于hibernate这种完全自动化的框架我更喜欢mybatis
    Mybatis解决sql中like通配符模糊匹配 构造方法覆盖 mybits 增删改
  • 原文地址:https://www.cnblogs.com/luluping/p/1530636.html
Copyright © 2011-2022 走看看