欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

在自个儿的本地计算机数据库上做一个函数或存储过程

更新时间: 2014-01-05 02:18:12 责任编辑: Author_N1

 

在自己的本地计算机数据库上做一个函数或存储过程
在自己的本地计算机数据库上做一个函数或存储过程
功能:根据输入的字符串(以','分隔)  返回一个@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 all select 3,'3,4,5,6,7 '
union all select 4,'1,5,7,8,9 '
union all select 5,'3,5,6,9,11,12 '
union all select 6,'2,3,4,5,7 '
union all select 7,'3,4,5,6,7,8 '
union all select 8,'1,2,3,4,5,6,7,8,9,10 '
union all select 9,'1,7,8,9 '

declare @s varchar(100)
set @s='1,11,12'
select a.*
into #temp
from #tb a
inner join (select * from dbo.Split(@s,','))b on CHARINDEX(','+b.value+',',','+strcode+',')>0

declare @v varchar(100)
set @v=''
select @v=@v+CAST(id as varchar) from #temp
select @v

drop table #tb,#temp

/*
124895
*/
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:18:12
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/8241/
本文WWW.DOC100.NET DOC100.NET版权所有。