PostgreSQL中搜索中的特殊字符
问题描述:
我试图根据键控搜索字符串检索联系人名称。它执行好了英文字母和奇怪的行为对特殊字符,例如_,/,\,%PostgreSQL中搜索中的特殊字符
我在功能查询类似于
SELECT contact_name FROM contacts WHERE LOWER(contact_name) LIKE LOWER('_McDonald%') ORDER BY LOWER(contact_name) ASC LIMIT 1;
看起来,搜索时,它检索所有联系人名称而不是所需的。上述特殊字符会出现类似的奇怪现象。我需要支持这些。我如何教育postgres考虑这些字符?请指导我。
感谢和问候, 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;
如前所述,我们假设联系人:麦当劳,_麦当劳,__麦当劳,麦当劳,麦当劳,_麦当劳,麦克唐纳德。我可能会搜索'_M%','%_%','%M%','M%'等。确保区分通配符字符'%'和普通特殊字符'%'。 – Siva