MySQL中如何精确筛选groups列中X0/X1后接C的记录?
问题描述
我有一张包含groups列的数据表,数据示例如下:
| groups |
|---|
| X0C5TB24 |
| X11C17N24 |
| X1C14B25 |
| X7C18B15 |
| X0C88TB12 |
| ... |
需要通过WHERE子句过滤出groups列中前缀为X0或X1且其后紧跟C的记录,期望结果如下:
| groups |
|---|
| X0C5TB24 |
| X1C14B25 |
| X0C88TB12 |
尝试过以下两种写法,但均会误匹配到不符合要求的X11C17N24记录:
- 正则表达式写法:
WHERE groups REGEXP "^X[0-1]"
- SUBSTR函数写法:
WHERE SUBSTR(groups, 1,2) IN ("X0","X1")
问题在于上述写法仅判断了开头的X0/X1,未限制其后必须紧跟C,导致X11开头的记录被错误匹配。
解决方案
方法1:修正正则表达式
明确要求X0/X1之后紧跟C,精准匹配目标模式:
WHERE groups REGEXP "^X[01]C"
说明:^匹配字符串起始位置,X[01]匹配X0或X1,C强制要求紧跟在X0/X1之后,彻底排除X11这类不符合的记录。
方法2:组合SUBSTR判断
同时校验前两位是X0/X1,且第三位为C:
WHERE SUBSTR(groups, 1, 2) IN ('X0', 'X1') AND SUBSTR(groups, 3, 1) = 'C'
说明:逻辑清晰直观,无需掌握正则语法也能理解。
方法3:LIKE通配符匹配
直接匹配固定前缀模式:
WHERE groups LIKE 'X0C%' OR groups LIKE 'X1C%'
说明:写法简单易懂,对于固定前缀的场景,数据库优化器通常能提供较好的查询效率。
内容的提问来源于stack exchange,提问作者Alejandro Carrera
相关产品推荐
相关产品推荐

