PostgreSQL模式匹配问题:使用ILIKE匹配多路径无返回结果
问题原因及解决方法
核心原因
ILIKE是SQL的模糊匹配运算符,它仅支持两种通配符:
%:匹配任意长度的任意字符(包括空字符)_:匹配单个任意字符
你写的/(samples|items)/delete%属于正则表达式语法,但ILIKE不会解析这类语法,它会把整个字符串当成字面量去匹配——也就是寻找endpoint字段完全以/(samples|items)/delete开头的记录,而你的数据里不存在这种格式的内容,因此返回空结果。
正确的实现方式
方式1:用OR连接多个ILIKE条件
这是兼容性最好的写法,逻辑直观:
select endpoint from endpoints where endpoint ilike '/samples/delete%' or endpoint ilike '/items/delete%';
方式2:使用正则表达式匹配(以PostgreSQL为例)
如果你的数据库支持正则表达式(比如PostgreSQL的~*运算符,支持不区分大小写匹配),可以用正则语法实现:
select endpoint from endpoints where endpoint ~* '^/(samples|items)/delete';
这里^表示匹配字符串开头,(samples|items)表示匹配samples或items任意一个,~*实现不区分大小写的正则匹配,效果和ILIKE一致。
内容的提问来源于stack exchange,提问作者MaterialZ
相关产品推荐
相关产品推荐

