SQL数据字符串的拆分

一、概述:

MSSQL字符串的拆分没有封装太多常用的方式,所以如果向数据库中插入用特殊字符分割字符串(比如CB0$CB2$CB3,CB0$CB2$CB3)时就可能需要数据库能够分割字符串,SQL中拆分字符串的常用方法有

1、len(@strname) :查询字符串的长度

2、charindex('$',@strname,1) :查询特殊字符存在的位置index

3、substring(@strname,startindex,length):截取字符串长度

4、left(@strname,length):左边截取length字符

5、right(@strname,length):右边截取length字符

二、字符串动态拆分

现在完成一个查询,要求:动态输入格式CB1,CB2,CB3类似的字符串,字符串中间有个逗号分隔符,用字符串拆分,动态分割出所有组合字符串(逗号左右字符串);

实例1:

declare @PowerString nvarchar(200)  
set @PowerString='CB0$CB2$CB3,CB0$CB2$CB3'
declare @startindex int  
declare @endindex int  
declare @CurrResult nvarchar(50)  

set @startindex=1  
set @endindex=1  
while 1=1  
begin  
  set @endindex=charindex(',',@PowerString,@startindex);  
  if @endindex=0  
    set @endindex=LEN(@PowerString)+1  
  set @CurrResult=SUBSTRING(@PowerString,@startindex,@endindex-@startindex)  
  select @CurrResult
  set @startindex=@endindex+1   
  if @CurrResult is null or @CurrResult='' or @endindex=LEN(@PowerString)+1  
    break;   
end  

 实例二:一个存储过程,通过字符串拆分加上事务绑定,能够保证数据的完整性

Alter Proc p_HotelTour_Create  
 @HotelCode nvarchar(50),   
 @TouPics nvarchar(250),
 @resultcode int output  
as  
begin  
 declare @startindex int                
 declare @endindex int                
 declare @CurrResult nvarchar(50)             
 set @startindex=1                
 set @endindex=1   
 begin tran  
 begin try  
 --插入内容图片  
 while 1=1                
      begin                
   set @endindex=charindex('$',@TouPics,@startindex);                
   if @endindex=0                
   set @endindex=LEN(@TouPics)+1                
   set @CurrResult=SUBSTRING(@TouPics,@startindex,@endindex-@startindex)                         
   if not exists(select c_TourCode from HotelTour where c_HotelCode=@HotelCode and c_TourCode=@CurrResult)
        insert into HotelTour(c_HotelCode,c_TourCode,i_IsEnable) values(@HotelCode,@CurrResult,0)               
   set @startindex=@endindex+1                 
   if @CurrResult is null or @CurrResult='' or @endindex=LEN(@TouPics)+1                
   break;     
   end     
   commit tran 
   set @resultcode=1 
 end try  
 begin catch  
 rollback tran  
    set @resultcode=-1  
 end catch  
end

 

转载于:https://www.cnblogs.com/xibei666/p/5230906.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值