实现类似split功能(charindex)

1.存储过程实现

create   procedure  sp_split_string
(
    
@string          NVARCHAR ( 4000 )
)
AS
BEGIN
    
DECLARE   @object_id       nvarchar ( 500 )
    
DECLARE      @i            INT
    
DECLARE      @len          INT     
    
print   @string
    
IF  ( @string   IS   NULL OR  ( LTRIM ( @string =   '' )
        
RETURN
    
    
WHILE   CHARINDEX ( ' , ' , @string >   0
        
BEGIN
            
SET   @len   =   LEN ( @string )
            
SET   @i   =   CHARINDEX ( ' , ' @string )
            
SET   @object_id   =   LEFT ( @string @i - 1 )

            
INSERT   INTO  a (id)  VALUES  ( @object_id ) -- 少做修改,改成需要的sql语句即可
             SET   @string   =   RIGHT ( @string @len   -   @i )
        
END
    
SET   @object_id   =   @string
    
INSERT   INTO  a (id)  VALUES  ( @object_id ) -- 少做修改,改成需要的sql语句即可
END
go

-- 测试
--
 select * from a
--
 exec sp_split_string '102,103,105,106,107,108,200,500,306,408'
--
 select * from a
2.一个用于处理分隔","的函数tf_split_str
-- 1. 建立测试数据
--
1.1 create table TypeAdv
CREATE   TABLE  TypeAdv 
(
    id 
int ,
    TypeName 
varchar ( 200 )
)
-- 1.2 insert data
insert   into  TypeAdv(id,TypeName)  values ( 1 , ' 电脑网络 ' )
insert   into  TypeAdv(id,TypeName)  values ( 2 , ' 游戏动漫 ' )
insert   into  TypeAdv(id,TypeName)  values ( 3 , ' 软件下载 ' )
insert   into  TypeAdv(id,TypeName)  values ( 4 , ' 商务商铺 ' )
insert   into  TypeAdv(id,TypeName)  values ( 5 , ' 建站服务 ' )
insert   into  TypeAdv(id,TypeName)  values ( 6 , ' 门户综合 ' )
insert   into  TypeAdv(id,TypeName)  values ( 7 , ' 影视音乐 ' )
insert   into  TypeAdv(id,TypeName)  values ( 8 , ' 休闲娱乐 ' )
insert   into  TypeAdv(id,TypeName)  values ( 9 , ' 生活资讯 ' )
insert   into  TypeAdv(id,TypeName)  values ( 10 , ' 文学小说 ' )
    
-- 1.3 create table TypeAdv
CREATE   TABLE  GroupAdv 
(
    id 
int ,
    GroupName 
varchar ( 200 ),
    IntentionSet 
varchar ( 200 )
)
-- 1.4 insert data
insert   into  GroupAdv(id,GroupName,IntentionSet)  values ( 5 , ' 广告分组一 ' , ' 1,2,3,4,5,6,7,10 ' )
insert   into  GroupAdv(id,GroupName,IntentionSet)  values ( 6 , ' 广告分组二 ' , ' 1,2,3,4,5,6 ' )
-- 2. 创建分隔“,”的函数
CREATE   FUNCTION  tf_split_str
(
    
@string          NVARCHAR ( 4000 )
)
RETURNS   varchar ( 4000 )
AS
BEGIN
    
DECLARE   @object_id       nvarchar ( 400 )
    
DECLARE      @i            INT
    
DECLARE      @len          INT
    
declare   @return       varchar ( 400 )
    
set   @return = ''

    
IF  ( @string   IS   NULL OR  ( LTRIM ( @string =   '' )
        
RETURN   @return
    
    
WHILE   CHARINDEX ( ' , ' , @string >   0
        
BEGIN
            
SET   @len   =   LEN ( @string )
            
SET   @i   =   CHARINDEX ( ' , ' @string )
            
SET   @object_id   =   LEFT ( @string @i - 1 )
            
select   @return   =   @return + ' , ' + TypeName  from  TypeAdv  where  id  =   @object_id
            
SET   @string   =   RIGHT ( @string @len   -   @i )

        
END

    
SET   @object_id   =   @string
    
select   @return   =   @return + ' , ' + TypeName  from  TypeAdv  where  id  =   @object_id
    
set   @return   =   stuff ( @return , 1 , 1 , '' )
    
RETURN   @return
END
-- 3.测试
select  b.id,b.GroupName,dbo.tf_split_str(b.IntentionSet)  from  GroupAdv b
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值