我用java,postgressSQL实现模糊查询,用like%%做的,但是当我检索“%”或者“_”的时候时候,总是把所有的都检索出来,而且结果还不一样。我查了一下,好像是说postgressSQL把“_”认为是任何匹配,但是我不知道怎么解决,希望大家帮帮忙了。

解决方案 »

  1.   

    如果 pattern 不包含百分号 或者下划线,那么该模式只代表它本身; 这时候 LIKE 的行为就象等号操作符。 在 pattern 里的下划线(_)代表(匹配)任何单个字符;而一个百分号(%)匹配任何零或更多 字符长的字串。 要匹配文本的下划线或者百分号,而不是匹配其它字符, 在pattern 里相应的字符必须 前导逃逸字符。缺省的逃逸字符是反斜杠,但是你可以用 ESCAPE 子句指定一个。 要匹配逃逸字符本身,写两个逃逸字符。 请注意反斜杠在字串文本里已经有特殊含义了,所以如果你写一个 包含反斜杠的模式常量,那你就要在 SQL 语句里写两个反斜杠。 因此,写一个匹配单个反斜杠的模式实际上要在语句里写四个反斜杠。 你可以通过用 ESCAPE 选择一个不同的逃逸字符 来避免这样;这样反斜杠就不再是 LIKE 的特殊字符了。 但仍然是字符文本分析器的特殊字符,所以你还是需要两个反斜杠。) select * from yourTable where coln like '%\%%'
    select * from yourTable where coln like '%\_%'