2008-10-13 51 views
0

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

其中“名称”ILIKE'Nome a%teste \ /%'ESCAPE'a'(使用as转义字符)。

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

有什么我失踪? (我请教TFM)

回答

2

使用 “ESCAPE” 符

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

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

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

没有逃生你需要做的

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

(4 \“s到代表一个文字\)


谢谢,但我还是原来的问题与削减。与

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

搜索不给我一个结果,而

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

(除去斜线,这是目前该行中)按预期工作。 - Kknd

它可能你的字符串没有像你指定的文字“/”。你可能有一个null或者其他空白字符。或者可能,你有/在不同的字符集中。

我会尝试使用这个测试对于可能的情况

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

将返回已/的东西分开

+0

谢谢,但我仍然有斜线的原始问题。使用WHERE名称搜索ILIKE'Nome \%test \\\\ /%'不会给我一个结果,而WHERE“name”ILIKE'Nome \%test \\\\%'(删除斜线,在该行中存在)按预期工作。 – Kknd 2008-10-13 15:30:13

1

您是否尝试过只用反斜杠逃脱这样的:

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

我试过线(但不是线,未见分离),但它不起作用。 – Kknd 2008-10-13 03:25:24