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

转载于:https://www.cnblogs.com/hq2008/archive/2007/08/14/854913.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值