MySQL如何查询字段中按顺序包含指定字符串的记录
MySQL查询语句编写方案
需求拆解
你需要同时满足3个查询条件:
- route字段包含
data2 - route字段包含
data7 data2在route中的出现顺序早于data7
基础实现方案
直接用MySQL内置的LOCATE()函数实现,该函数会返回子串在目标字符串中第一次出现的位置,子串不存在时返回0:
SELECT name, route FROM 你的表名 WHERE LOCATE('data2', route) > 0 AND LOCATE('data7', route) > 0 AND LOCATE('data2', route) < LOCATE('data7', route);
更严谨的防误匹配优化
如果你的业务中可能出现data22、data71这类类似子串的取值,为了避免部分匹配,我们可以给route前后拼接空格后再匹配带空格的子串,确保匹配的是完整的独立值:
SELECT name, route FROM 你的表名 WHERE LOCATE(' data2 ', CONCAT(' ', route, ' ')) > 0 AND LOCATE(' data7 ', CONCAT(' ', route, ' ')) > 0 AND LOCATE(' data2 ', CONCAT(' ', route, ' ')) < LOCATE(' data7 ', CONCAT(' ', route, ' '));
结果验证
以上语句执行后会返回符合要求的4条记录:A1、A3、A4、A5,自动排除顺序不符的A2,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Nakula Sadewa
相关产品推荐
相关产品推荐

