SQL查询搜索优化:如何实现人名字段精准匹配,仅返回完全符合的结果
问题原因
你使用的~是PostgreSQL的正则匹配运算符,默认匹配逻辑为:只要目标字段值包含正则表达式对应的子串,就会判定为匹配成功。你编写的正则规则Ann Van Heck可以匹配所有包含该字符串序列的内容,而Ann Van Hecke的前缀完全符合该序列,因此也被查询返回。
优化方案
方案1:使用精确等于匹配(最优选择)
如果不需要用到正则的扩展能力,仅需要完全匹配字符串,直接使用=运算符即可,语法最简单,查询性能也最高:
SELECT full_name FROM profiles WHERE full_name = 'Ann Van Heck';
方案2:正则添加首尾锚定符(需保留正则用法时使用)
如果后续有扩展正则匹配规则的需求,要通过正则实现完全匹配,需要给规则增加行首锚定符^和行尾锚定符$,强制要求整个字段值和规则完全一致才判定匹配:
SELECT full_name FROM profiles WHERE full_name ~ '^Ann Van Heck$';
内容的提问来源于stack exchange,提问作者Omayma HARBAOUI
相关产品推荐
相关产品推荐

