在ILIKE查询中转义

时间:2008-10-13 03:17:15

标签: database postgresql escaping

我需要执行查询,以'Nome%teste \ /'作为前缀搜索文本。我正在使用:

进行查询

其中“name”ILIKE'Nome a%teste \ /%'ESCAPE'a'(使用转义符号)。

有一行与此匹配,但此查询不返回任何内容。删除斜杠('Nome%teste \'),它可以正常工作。但我不明白为什么斜杠是一个问题,因为默认转义是反斜杠,我已将其更改为'a'在这个测试中。

有些东西我不见了? (我咨询了TFM)

2 个答案:

答案 0 :(得分:2)

使用“ESCAPE”说明符

WHERE "name" ILIKE 'Nome ~% teste \\/' ESCAPE '~' 

http://www.postgresql.org/docs/8.2/static/functions-matching.html

注意:您仍然需要为字符串解析器提供两次\。

如果没有ESCAPE,你需要做

WHERE "name" ILIKE 'Nome \% test \\\\/' 

(4代表一个文字\)


  

谢谢,但我仍然有斜线的原始问题。搜索

WHERE "name" ILIKE 'Nome \% test \\\\/%' 
     

不要给我一个结果,而

WHERE "name" ILIKE 'Nome \% test \\\\%' 
     

(删除了行中存在的斜杠)按预期工作。 - Kknd

可能你的字符串没有你指定的文字“/”。你可能在其中有一个null或其他空格字符。或者,您可能拥有/使用不同的字符集。

我会尝试用它来测试这种可能的情况

 WHERE "name" ILIKE 'Nome \% ' AND "name" ~* '\\.{1,10}/' 

将返回具有/由某个东西分隔的行(但不是没有分隔的行)

答案 1 :(得分:1)

您是否尝试过使用反斜杠来逃避它:

where "name" ILIKE 'Nome \% teste \\\/';