「PostgreSQL」PostgreSQL模糊查询, postgres特殊符号模糊查询

在做WEB项目时, 经常会需要使用搜索功能, 而且大多数时候是需要模糊搜索, 以下将对模糊搜索进行介绍:

通常我们是这样写的:

SELECT * FROM 表名 WHERE 字段 LIKE ('%' || '关键字' || '%')

或者这样写:

SELECT * FROM 表名 WHERE 字段 ~* '关键字'

但是这两种是有风险的!

可能出现的问题:

invalid regular expression: quantifier operand invalid

出现原因: 使用 ~* 符号进行模糊查询时, 关键字使用 *

invalid regular expression: invalid escape \ sequence

出现原因: 使用 ~* 符号进行模糊查询时, 关键字使用 \

等等各种因为特殊符号产生的问题, 不一一举例了

类似的, 使用特殊符号作为关键字时, 就会出现类似的报错问题.

所以, 既是模糊搜索,搜索的内容又允许带有特殊符号的时候, 就必须对此情况进行处理!

解决方案:

同事们经过摸索, 研究出来的超厉害的解决方案:
SELECT * FROM 表名 WHERE 字段 ILIKE regexp_replace(concat('%','关键字','%'),'\\','\\\','g')

经过测试, 你在关键字内输入任何特殊符号, 都能正常的进行查询!

你可能感兴趣的:(疑难杂症)