zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    C语言第一天
    【PHP学习笔记】Hello,World!
    Photoshop文本位置范围
    快捷套取单色图片
    cesium加载纽约市3dtiles模型
    Python基础——0前言
    Python基础——1基础
    Python基础——2函数
    Python基础——3特性
    Python基础——4高阶函数
  • 原文地址:https://www.cnblogs.com/hq2008/p/854913.html
Copyright © 2011-2022 走看看