PostgreSQL中如何查询匹配指定字符串的通配符记录?
PostgreSQL前缀通配符匹配查询
针对你的需求,直接用下面的SQL就能从public.items表中找出匹配给定字符串的通配符记录:
方法一:转换通配符配合LIKE匹配
SELECT * FROM public.items WHERE 'stackoverflow.com' LIKE REPLACE(wildcard, '*', '%');
原理很简单:PostgreSQL里LIKE用%表示任意长度的任意字符,把wildcard里的*替换成%,就能用标准的前缀匹配规则,匹配所有以wildcard去掉*后的内容开头的字符串。
方法二:提取前缀直接对比
如果想更严谨,先过滤出符合xxx*格式的记录,再对比前缀:
SELECT * FROM public.items WHERE wildcard LIKE '%*' AND LEFT('stackoverflow.com', LENGTH(wildcard) - 1) = LEFT(wildcard, LENGTH(wildcard) - 1);
这里先筛选出以*结尾的通配符记录,再分别截取给定字符串和通配符的前缀部分(去掉通配符的最后一个*),对比相等就说明匹配。
如果是在应用程序里使用,把硬编码的'stackoverflow.com'换成参数即可,示例如下:
SELECT * FROM public.items WHERE $1 LIKE REPLACE(wildcard, '*', '%');
内容的提问来源于stack exchange,提问作者awm
相关产品推荐
相关产品推荐

