如何在MySQL中使用LIKE或正则表达式筛选指定品牌数据
筛选符合条件的品牌解决方案
方法一:使用多个LIKE条件组合
利用LIKE的通配符特性,组合条件确保同时满足「以H开头」「包含o」「包含r」三个要求:
SELECT DISTINCT brand FROM phones WHERE brand LIKE 'H%' AND brand LIKE '%o%' AND brand LIKE '%r%';
这个语句会精准筛选出Hydrogen和Honor,自动排除不含r的Huawei。
方法二:使用MySQL正则表达式(REGEXP)
如果需要更灵活的顺序匹配,可借助正则实现:
兼容所有MySQL版本的写法
SELECT DISTINCT brand FROM phones WHERE brand REGEXP '^H.*o.*r|^H.*r.*o';
^H指定以H开头,.*o.*r匹配o在r前的场景,.*r.*o匹配r在o前的场景,用|分隔两种情况,覆盖所有顺序可能性。
MySQL 8.0+简化写法(支持正向预查)
SELECT DISTINCT brand FROM phones WHERE brand REGEXP '^H(?=.*o)(?=.*r)';
(?=.*o)和(?=.*r)是正向预查,直接确保字符串中同时存在o和r,无需关心两者顺序,写法更简洁。
你之前语句的问题说明
- 第一个语句
select distinct brand from phones where brand like 'h%o%r';:要求o必须出现在r之前,但Hydrogen的拼写是H-y-d-r-o-g-e-n,r在o前面,因此不满足条件,仅返回Honor。 - 第二个语句
select distinct brand from phones where brand like 'h%(o|r)';:LIKE不支持|这类正则语法,这里的(o|r)会被当作普通字符处理,没有匹配的品牌,所以返回空集。
内容的提问来源于stack exchange,提问作者Kelly
相关产品推荐
相关产品推荐

