关于SQL模糊查询

假设一个表里有个字段内容是这样的"12,121,35,79"也就是说这个字段的内容在提交的时候可以是多项的,比如"13"或者"15,27,58````"我需要查找所有包含... 假设一个表里有个字段内容是这样的"12,121,35,79" 也就是说这个字段的内容在提交的时候可以是多项的,比如"13"或者"15,27,58````"
我需要查找所有包含"12"的纪录.我写的语句是这样的:
exec="select * from user where zy like '%"+id+"%'"
查找出来后,发现存在一个问题:
比如当id=12 (我要找所有该字段中包含12的记录)
这句语言执行后所找出来的不光是所有包含12的记录,像"121"或者"312"等这些包含"12"的字段都会被算做符合条件`````晕了,我只要"12"````
请教各位大侠,要怎么改进?????
首先感谢各位的帮助!
原先语句错误是因为逗号没有加引号,我把语句修改了一下,原来出现的语句错误没有了:
exec="select * from user where zy ="&zy&" or zy like '%"","+zy+"%' or zy like '%"","+zy+",""%' or zy like '%"+zy+",""%' "

语句虽然通过了,但执行后出现如下错误:Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e21'

ODBC 驱动程序不支持所需的属性。

/admin/

zyb.asp,行 51 附近如下:
<%

zy=request("id")

exec="select * from user where zy ="&zy&" or zy like '%"","+zy+"%' or zy like '%"","+zy+",""%' or zy like '%"+zy+",""%' "

set rs=server.createobject("adodb.recordset")
rs.open exec,conn,1,1 (该行为第51行)
%>
补充2
问题出在 肯定是"&"用得不对,把 zy ="&zy&" 拿掉就可以运行.但拿掉就不能满足我的要求.
暂且拿掉,合掉以后,运行结果为空,说明逗号的引用方法也不对,
总结:
exec="select * from user where zy ="&zy&" or zy like '%"","+zy+"%' or zy like '%"","+zy+",""%' or zy like '%"+zy+",""%' "
这句代码中,存在两个问题,一是:="&zy&" 二就是逗号引用方法不对

求解中```
展开
 我来答
badkano
2009-07-02 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144776 获赞数:885365
团长

向TA提问 私信TA
展开全部
select * from user where zy like '12,%' or zy like ',12,' or zy like ',12'

这个在sql查询分析器中能取得正确结果,你照样改到你那里吧

exec="select * from user where zy like '%",+id+"' or zy like '%",+id+,"%' or zy like '"+id+,"%'"
-------补充---------
那就再加一个就行
select * from user where zy like '12,%' or zy like ',12,' or zy like ',12' or zy ='12'
--------补充2--------
你库是ac的库吧?
你说的那个错误在网上搜了下,各种问题都有,估计还是你那边没调试好,建议,搜索一下,看看你到底是哪个问题,该怎么解决
---补充3----
:='"&zy&"'

外边加对单引号试验一下
midasblesshj
2009-07-02 · TA获得超过127个赞
知道小有建树答主
回答量:177
采纳率:0%
帮助的人:179万
展开全部
CREATE FUNCTION F_test (@p_str varchar(254))
RETURNS varchar(500) AS
BEGIN
DECLARE @rtn_str varchar(500);
DECLARE @tmp_str varchar(254);
set @rtn_str='';
set @tmp_str=@p_str
while (charindex(',',@tmp_str)>0)
begin
set @rtn_str=@rtn_str+''''+left(@tmp_str,charindex(',',@tmp_str)-1)+''',';
set @tmp_str=right(@tmp_str,len(@tmp_str)-charindex(',',@tmp_str));
end;
set @rtn_str=@rtn_str++''''+@tmp_str+'''';
return @rtn_str;
END

使用:
declare @str varchar(254)
set @str='select 1 where ''12'' in('+dbo.F_test('12,121,35,79')+')'
exec(@str)
也就是相当于要建立个存储过程来执行
CREATE PROCEDURE PRC_test
@p_ID varchar(50)
AS
begin
declare @str varchar(254)
set @str='select * from user where '+@p_ID+' in('+dbo.F_test(zy)+')'
exec(@str)
end
很不方便,他们那种写法是最好的:
select * from user where zy like '12,%' or zy like '%,12,%' or zy like '%,12' or zy ='12'
即:
exec="select * from user where zy like '"+id+",%' or zy like '%,"+id+",%' or zy like '%,"+id+"' or zy='"+id+"'"
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
闲雅又爽快的雪花G
2009-07-02 · 超过39用户采纳过TA的回答
知道小有建树答主
回答量:204
采纳率:0%
帮助的人:113万
展开全部
不知道我理解你的意思对不对?
字段内容是以“,”来分隔的各个部分,
你想获得那些其中一个部分是12的记录,对吗?

如果是这样的话 你可以使用

exec="select * from user where zy like "%,"+id+",%" or zy like ""+id+",%"
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hotyxm
2009-07-02 · TA获得超过1028个赞
知道大有可为答主
回答量:1698
采纳率:50%
帮助的人:1190万
展开全部
exec="select * from user where zy like '"+id+"%'"
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式