PostgreSQL中搜索中的特殊字符

PostgreSQL中搜索中的特殊字符

问题描述:

我试图根据键控搜索字符串检索联系人名称。它执行好了英文字母和奇怪的行为对特殊字符,例如_,/,\,%PostgreSQL中搜索中的特殊字符

我在功能查询类似于

SELECT contact_name FROM contacts WHERE LOWER(contact_name) LIKE LOWER('_McDonald%') ORDER BY LOWER(contact_name) ASC LIMIT 1; 

看起来,搜索时,它检索所有联系人名称而不是所需的。上述特殊字符会出现类似的奇怪现象。我需要支持这些。我如何教育postgres考虑这些字符?请指导我。

感谢和问候, Siva。

+1

如前所述,我们假设联系人:麦当劳,_麦当劳,__麦当劳,麦当劳,麦当劳,_麦当劳,麦克唐纳德。我可能会搜索'_M%','%_%','%M%','M%'等。确保区分通配符字符'%'和普通特殊字符'%'。 – Siva

只是为了完成图片:

您还可以使用ESCAPE子句指定的字符转义通配符。如果您想要包含例如您的搜索字符串中有一个\

SELECT contact_name 
FROM contacts 
WHERE LOWER(contact_name) LIKE LOWER('@_McDonald%') ESCAPE '@' 
ORDER BY LOWER(contact_name) ASC 
LIMIT 1; 

顺便说一句:我会建议打开配置选项standard_conforming_strings以避免混淆(黑斯的回答避免使用E'语法这个问题)。 从9.1开始,这是默认模式。

我不知道你正在使用的是什么PostgreSQL版本,但是如果你想按照docs中描述的那样直接匹配它们,请确保你转义任何特殊字符(_,%,\,...)。

假设你想搜索与_McDonald启动任何联系人姓名:

SELECT contact_name FROM contacts 
WHERE LOWER(contact_name) LIKE LOWER(E'\\_McDonald%') 
ORDER BY LOWER(contact_name) ASC LIMIT 1;