SQL 中传数组参数的变通方法:通过字符串分拆实现

字符串分拆函数:

/****** 对象:  UserDefinedFunction [dbo].[Split]    脚本日期: 04/23/2007 16:02:42 ******/
SET  ANSI_NULLS  ON
GO
SET  QUOTED_IDENTIFIER  ON
GO
--  =============================================
--
 Author:        Librading
--
 Create date: 
--
 Description:    字符串分拆函数
--
 =============================================
CREATE   FUNCTION   [ dbo ] . [ Split ]
(
    
@Input   varchar ( 4000 ),  --  输入字符串
     @Separator   varchar ( 4000 =   ' , '   --  分隔符
)
RETURNS  
@Result   TABLE  
(
    Value 
varchar ( 4000 )
)
AS
BEGIN

DECLARE   @InputLength   int ;
SET   @InputLength   =   LEN ( @Input );
DECLARE   @SeparatorLength   int ;
SET   @SeparatorLength   =   LEN ( @Separator );
DECLARE   @LastIndex   int ;
SET   @LastIndex   =   0 ;
DECLARE   @CurrentIndex   int ;
SET   @CurrentIndex   =   - 1 ;

WHILE   @CurrentIndex   !=   0
BEGIN
    
SET   @CurrentIndex   =   CHARINDEX ( @Separator @Input @LastIndex  );

    
IF   @CurrentIndex   !=   0
        
INSERT   @Result
        (
            Value
        )
        
VALUES
        (
            
SUBSTRING ( @Input @LastIndex @CurrentIndex   -   @LastIndex )
        )
    
ELSE
        
INSERT   @Result
        (
            Value
        )
        
VALUES
        (
            
SUBSTRING ( @Input @LastIndex @InputLength   +   1   -   @LastIndex )
        )

    
SET   @LastIndex   =   @CurrentIndex   +   @SeparatorLength ;
END

RETURN  

END

 使用例子:

1、简单的例子:

select   *   from  dbo.Split( ' a,b,c ' ' , ' );

2、拆分后的表作为 int 或者其他数据类型而不是字符串:

DECLARE   @Table   TABLE
(
    ID 
int
);

INSERT   @Table   SELECT   *   FROM   [ dbo ] . [ Split ] ( ' 1---2---3---4---5 ' ' --- ' );

SELECT   *   FROM   @Table ;
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值