小弟请教大家一个关于存储过程的问题

wangjianjun02 2007-12-17 03:44:36
我有一些数据是动态产生的,比如说用户输入了三个关键字"汽车,电脑,通讯",我现在的做法是在数据库中寻找类别分别"汽车,电脑,通讯"的数据,采用循环的方法,我这样一来就会产生三个表,最后将三个表合并在一起,返回给用户,我原来是在程序中循环的,现在我想在存储过程中循环,但是我不太会写,请大家帮助我
...全文
48 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2007-12-17
  • 打赏
  • 举报
回复
/*
功能:实现split功能的函数
*/

create function dbo.fn_split
(
@inputstr varchar(8000),
@seprator varchar(10)
)
returns @temp table (a varchar(200))
as

begin
declare @i int

set @inputstr = rtrim(ltrim(@inputstr))
set @i = charindex(@seprator, @inputstr)

while @i >= 1
begin
insert @temp values(left(@inputstr, @i - 1))

set @inputstr = substring(@inputstr, @i + 1, len(@inputstr) - @i)
set @i = charindex(@seprator, @inputstr)
end

if @inputstr <> '\'
insert @temp values(@inputstr)

return
end
go

--调用

declare @s varchar(1000)

set @s='1,2,3,4,5,6,7,8,55'

select * from dbo.fn_split(@s,',')

drop function dbo.fn_split





dawugui 2007-12-17
  • 打赏
  • 举报
回复
如果数量多,得先通过函数或存储过程分解字符串,然后使用charindex()
dawugui 2007-12-17
  • 打赏
  • 举报
回复
如果只有三个,好办.

declare @s as varchar(100) '汽车,电脑,通讯'
declare @s1 as varchar(10)
declare @s2 as varchar(10)
declare @s3 as varchar(10)
set @s1 = left(@s , charindex(',' , @s) - 1)
set @s2 = substring(@s , charindex(',' , @s) + 1 , charindex(',' , @s , charindex(',' , @s) + 1) , charindex(',' , @s , charindex(',' , @s) + 1) - charindex(',' , @s) - 1)
set @s3 = reverse(left(reverse(@s) , charindex(',' , reverse(@s) - 1))

select * from tb where charindex(@s1 , col) > 0 or charindex(@s2 , col) > 0 or charindex(@s3 , col) > 0
fa_ge 2007-12-17
  • 打赏
  • 举报
回复
全文檢索?

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧