日期:2014-05-17  浏览次数:20488 次

在自己的本地计算机数据库上做一个函数或存储过程
在自己的本地计算机数据库上做一个函数或存储过程
功能:根据输入的字符串(以','分隔)  返回一个@infocode varchar(30) 信息码
引用的数据表:(这个表要自己建)
表名 Test数据    

ID   strcode
1    1,2,5,8,9,14, 
2    1,3,5,6,7,8,9,11 
3    3,4,5,6,7 
4    1,5,7,8,9 
5    3,5,6,9,11,12 
6    2,3,4,5,7 
7    3,4,5,6,7,8 
8    1,2,3,4,5,6,7,8,9,10 
9    1,7,8,9 

表里的数据就是类似这样的 
现在问题就是 给出一个字符串 1,11,12 (长度不一定,也许是5个也许是6个) 
找出含有这个字符串数字的所有数据 
比如1,11,12 查询的结果应该是 ID: 1 2 4 5 8 9 
调用改功能 传参(1,11,12) 返回 对应编码 :124589 


------解决方案--------------------
/*
DROP FUNCTION dbo.Split
SELECT dbo.Split
*/
CREATE FUNCTION dbo.Split
(
@SplitString varchar(8000),-- nvarchar(4000)
@Separator varchar(2) = ','
)
RETURNS @SplitStringsTable TABLE
(
[id] int identity(1,1),
[value] varchar(8000)-- nvarchar(4000)
)
AS
BEGIN
    DECLARE @CurrentIndex int;
    DECLARE @NextIndex int;
    DECLARE @ReturnText varchar(8000);-- nvarchar(4000)
    SELECT @CurrentIndex=1;
    WHILE(@CurrentIndex<=len(@SplitString))
    BEGIN
        SELECT @NextIndex=charindex(@Separator,@SplitString,@CurrentIndex);
        IF(@NextIndex=0 OR @NextIndex IS NULL)
            SELECT @NextIndex=len(@SplitString)+1;
       
        SELECT @ReturnText=substring(@SplitString,@CurrentIndex,@NextIndex-@CurrentIndex);

        INSERT INTO @SplitStringsTable([value])
        VALUES(@ReturnText);
       
        SELECT @CurrentIndex=@NextIndex+1;
    END
    RETURN;
END

create table #tb(id int ,strcode varchar(100))
insert into #tb
select 1 as ID,'1,2,5,8,9,14, ' as strcode
union all select 2,'1,3,5,6,7,8,9,11 '
union