PostgreSQL使用LIKE查询姓名恰好含2个字母a的人员方法
PostgreSQL 基于LIKE语法查询姓名恰好含2个字母a的人员方案
你之前编写的select client from xclient where client like '%a%'只能匹配所有包含至少1个字母a的记录,无法筛选a的数量,因此不符合预期。
正确SQL语句
SELECT client FROM xclient WHERE client LIKE '%a%a%' AND client NOT LIKE '%a%a%a%';
逻辑说明
client LIKE '%a%a%':筛选出姓名中至少存在2个字母a的记录,保证a的数量下限为2client NOT LIKE '%a%a%a%':排除姓名中存在3个及以上字母a的记录,保证a的数量上限为2
两个条件组合后刚好命中仅包含2个字母a的记录,完全基于LIKE语法实现,符合要求:
- 示例姓名
Marta含2个a:满足第一个LIKE条件,不触发第二个NOT过滤,正常返回 - 示例姓名
Alaia含3个a:满足第一个LIKE条件,但也匹配%a%a%a%规则,被NOT过滤排除 - 仅含1个a的姓名:不满足第一个LIKE条件,直接排除
大小写适配说明
如果需要将大写A也计入统计,将LIKE替换为PostgreSQL专用的不区分大小写匹配符ILIKE即可:
SELECT client FROM xclient WHERE client ILIKE '%a%a%' AND client NOT ILIKE '%a%a%a%';
内容的提问来源于stack exchange,提问作者Hocks
相关产品推荐
相关产品推荐

