• sql split


    分割再成批插入

    declare @s varchar(
    8000),@sql nvarchar(4000)
    set @s='1,12,1212,4545'
    set @sql='insert into t(col) select '+replace(@s,',',' col union all select ')
    exec(@sql)

    测试
    drop table #table
    declare @s varchar(
    8000),@sql nvarchar(4000)
    set @s='1,12,1212,4545,454'
    create table #table (col 
    int)
    set @sql='insert into #table(col) select '+replace(@s,',',' col union all select ')
    exec(@sql)
    select 
    * from #table

    create function f_split(@SourceSql varchar(
    8000),@StrSeprate varchar(10))
    returns @temp table(a varchar(
    100))
    --实现split功能 的函数
    as 
    begin
    declare @i 
    int
    set @SourceSql=rtrim(ltrim(@SourceSql))
    set @i=charindex(@StrSeprate,@SourceSql)
    while @i>=1
    begin
    insert @temp values(left(@SourceSql,@i
    -1))
    set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
    set @i=charindex(@StrSeprate,@SourceSql)
    end
    if @SourceSql<>'\'
    insert @temp values(@SourceSql)
    return 
    end

    用法:select 
    * from dbo.f_split('ABC:BC:C:D:E',':')
    、Get_StrArrayLength
    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

     
    2、Get_StrArrayStrOfIndex
    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

    3、应用:
    set @next=1
    while @next<=dbo.Get_StrArrayLength(@KeyWords,',')
        begin
            
    if  dbo.Get_StrArrayStrOfIndex(@KeyWords,',',@next)<>''
            
    set @strwhere   =  @strwhere +' or Keywords like ''%'+dbo.Get_StrArrayStrOfIndex(@KeyWords,',',@next)+'%'''
            
    set @next=@next+1
        end
  • 相关阅读:
    【转】滑动窗口与拥塞控制
    LeetCode 34 :Find First and Last Position of Element in Sorted Array
    主要电商模式介绍
    使用springboot创建邮件服务器
    解决Windows下端口占用问题
    [leetcode]给定二维平面上的n个点,找出位于同一直线上的点的最大数目
    获得超类的泛型参数在子类实例化传入的实际类型
    构造单例的五种方法
    20162308 2017-2018-2 《程序设计与数据结构》第11周学习总结
    20162308 2017-2018-2 《程序设计与数据结构》第十周学习总结
  • 原文地址:https://www.cnblogs.com/hq2008/p/854913.html
Copyright © 2020-2023  润新知