关于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&" 二就是逗号引用方法不对
求解中``` 展开
我需要查找所有包含"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&" 二就是逗号引用方法不对
求解中``` 展开
展开全部
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&"'
外边加对单引号试验一下
这个在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&"'
外边加对单引号试验一下
展开全部
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+"'"
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+"'"
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不知道我理解你的意思对不对?
字段内容是以“,”来分隔的各个部分,
你想获得那些其中一个部分是12的记录,对吗?
如果是这样的话 你可以使用
exec="select * from user where zy like "%,"+id+",%" or zy like ""+id+",%"
字段内容是以“,”来分隔的各个部分,
你想获得那些其中一个部分是12的记录,对吗?
如果是这样的话 你可以使用
exec="select * from user where zy like "%,"+id+",%" or zy like ""+id+",%"
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
exec="select * from user where zy like '"+id+"%'"
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询