我做的jsp系统有一个 “搜索”功能,但是我在查询的时候输入”%%“的时候,所有的信息都搜索出来了。
 我知道这是跟SQL 2000中的%有关的。 
 那怎么来避免这种现象呢?

解决方案 »

  1.   

    WHERE (fieldName  LIKE '%%%%')这种方式查询是全部;主要是你使用sql的保留字(保留字符)%;
    使用WHERE (fieldName  LIKE '%[%][%]%')就可以了;也就说你把"%"的两边加上[]既可以;这和字段处理方法一样;比如你的表中字段用到ID,group,order,field等数据库保留字,在使用时只需要加上[]既可:[ID],[group],[order]。
    下表显示了括在方括号内的通配符的用法。符号            含义 
    LIKE '5[%]'     5% 
    LIKE '5%'       5 后跟 0 个或更多字符的字符串 
    LIKE '[_]n'     _n 
    LIKE '_n'       an, in, on (and so on) 
    LIKE '[a-cdf]'  a, b, c, d, or f 
    LIKE '[-acdf]'  -, a, c, d, or f 
    LIKE '[ [ ]'    [ 
    LIKE ']'        ] 
      

  2.   

    需要使用转义 escape
    查询的时候 where name like '%!%!%%' eascape '!'
     
    下边是sqlserver中的帮助,对你或许有帮助
    使用 ESCAPE 子句的模式匹配
    可搜索包含一个或多个特殊通配符的字符串。例如,customers 数据库中的 discounts 表可能存储含百分号 (%) 的折扣值。若要搜索作为字符而不是通配符的百分号,必须提供 ESCAPE 关键字和转义符。例如,一个样本数据库包含名为 comment 的列,该列含文本 30%。若要搜索在 comment 列中的任何位置包含字符串 30% 的任何行,请指定由 WHERE comment LIKE '%30!%%' ESCAPE '!' 组成的 WHERE 子句。如果不指定 ESCAPE 和转义符,SQL Server 将返回所有含字符串 30 的行。