MySQL中如何匹配后接空格的指定字符串(如CNA)
解决方案:匹配“CNA”后紧跟空格的字符串的SELECT语句
通用LIKE语句(适用于大多数数据库)
直接通过LIKE通配符精准匹配“CNA”后紧跟空格的场景:
SELECT column_name FROM your_table WHERE column_name LIKE '%CNA %';
- 效果说明:
- 匹配开头为“CNA ”的字符串(如
CNA GOOD) - 匹配中间包含“CNA ”的字符串(如
THE CNA IS HERE) - 自动排除
DECNAT、CNASTA SPELLED WRONG这类“CNA”后无空格的情况
- 匹配开头为“CNA ”的字符串(如
正则表达式增强版(针对严谨匹配需求)
如果需要避免“CNA”被包含在其他单词末尾(如XZCNA 这类场景),可以用正则限定“CNA”的前置边界:
MySQL/MariaDB
SELECT column_name FROM your_table WHERE column_name REGEXP '(^| )CNA ';
- 解释:
(^| )表示“CNA”要么在字符串开头,要么前面是空格;CNA强制指定后面紧跟空格。
PostgreSQL
使用~操作符实现正则匹配:
SELECT column_name FROM your_table WHERE column_name ~ '(^| )CNA ';
SQL Server
SQL Server 2017+支持REGEXP_LIKE,低版本可用PATINDEX:
-- 2017+版本 SELECT column_name FROM your_table WHERE REGEXP_LIKE(column_name, '(^| )CNA '); -- 低版本替代方案 SELECT column_name FROM your_table WHERE PATINDEX('%CNA %', column_name) > 0;
原方法无效的原因
- 转义字符误用:若仅写
LIKE '%CNA%'未指定后续空格,会匹配所有含“CNA”的字符串;错误转义空格也会导致匹配范围失控。 SUBSTRING_INDEX未做字符判断:仅提取含“CNA”的片段,未校验“CNA”后续是否为空格,无法过滤不符合要求的场景。
内容的提问来源于stack exchange,提问作者user2025637
相关产品推荐
相关产品推荐

