当前位置: 代码迷 >> ASP.NET >> 简单SQL语句,执行却不正常解决办法
  详细解决方案

简单SQL语句,执行却不正常解决办法

热度:5137   发布时间:2013-02-25 00:00:00.0
简单SQL语句,执行却不正常
Select * From Cover where SerialNo like 'BDJ/___/0710___'
结果正常

Select * From Cover where SerialNo like 'BDJ/部门名/0710___'
结果正常

Select * From Cover where SerialNo like 'BDJ/*/0710___'
一条查询结果都没有,到底是什么问题?

------解决方案--------------------------------------------------------
猜测:'*'并不是*表示的那种意义,就是表示一个普通的字符*
------解决方案--------------------------------------------------------
SQL code
Select * From Cover where SerialNo like  'BDJ/%/0710___ '
------解决方案--------------------------------------------------------
好像有这么条:在字符串的中间不允许使用通配符。
------解决方案--------------------------------------------------------
2楼为正确答案;
%:包含零个或更多字符的任意字符串,不是*
_(下划线):任何单个字符
------解决方案--------------------------------------------------------
Select * From Cover where SerialNo like 'BDJ/___/0710___ ' 
结果正常 

Select * From Cover where SerialNo like 'BDJ/部门名/0710___ ' 
结果正常 

Select * From Cover where SerialNo like 'BDJ/*/0710___ ' 
一条查询结果都没有,到底是什么问题?
--------------------------------------------------------------
终于让我发现了,你的两个/字符之间的长度问题,前面两们的长度都为3个字符,而你第三个只有一个字符,所以没有匹配到.
在条件字符串中包括*号字符是可以匹配的
我测试了一下
select * from t_course where course_name like 'sn*____'
是可以匹配到字符的,其关键就在于你后面的字符串长度必须与数据库中的字符串长度一致
我在数据库中的字段值为sn*dfkd

也不知道LZ是不是这个原因,希望可以帮到楼主


------解决方案--------------------------------------------------------
@楼上
*仅仅是一个字符,不是通配符;
select * from t_course where course_name like 'sn*____ ' 能查询出数据,是因为你的值中含有'*'
%:包含零个或更多字符的任意字符串,不是* 


------解决方案--------------------------------------------------------
关键是看个人怎么理解,一般接触过SQL人基本都知道,*号字符并不作为通配符使用
当然我就把他理解成一个字符,对,我说的只是个人的想法

我也没有说我的就是安全正确


------解决方案--------------------------------------------------------
*指一个字符。
% 指一串字符串。
------解决方案--------------------------------------------------------
SQL code
--创建环境create table A(ResearchCode int,ResearchContent varchar(1000))insert into     A  select 1,'调查1'              union select 2,'调查2'             union select 3,'调查3'             union select 4,'调查4'create table B(ResearchCode int,PeopleCode int, OutCome varchar(1000))insert into     B  select 3,0001,'是'--执行语句declare @PeopleCode intset @PeopleCode = 0001select ResearchCode,ResearchContent,PeopleCode,OutCome from (select A.ResearchCode,A.ResearchContent,isnull(PeopleCode,@PeopleCode) as PeopleCode,B.OutCome from A  left join B on A.ResearchCode = B.ResearchCode) as cwhere c.PeopleCode = 0001--(所影响的行数为 4 行)ResearchCode   ResearchContent     PeopleCode   OutCome                                                                    1                   调查1           1    NULL    2                   调查2           1    NULL    3                   调查3           1    是    4                   调查4           1    NULL
------解决方案--------------------------------------------------------
猜测: '* '并不是*表示的那种意义,就是表示一个普通的字符*
------解决方案--------------------------------------------------------
可以是字符变成SQL语句了。
  相关解决方案