如何使用正则表达式在SQL中精准匹配包含独立单词Old的字符串
匹配独立单词的SQL正则实现方案
要匹配独立出现的Old单词(不区分大小写、支持任意位置、排除作为其他单词子串的场景),核心是利用正则的单词边界匹配规则,不同数据库的具体实现语法如下:
MySQL / MariaDB
使用REGEXP关键字,单词边界用[[:<:]](单词起始)和[[:>:]](单词结束),默认不区分大小写:
SELECT folder FROM 表名 WHERE folder REGEXP '[[:<:]]Old[[:>:]]';
该写法可覆盖字符串开头/结尾、前后是空格、横杠、下划线等分隔符的场景,不会匹配
Harold、Oldfield这类包含Old子串的内容。
PostgreSQL
使用~*运算符(~为区分大小写匹配,~*为不区分大小写匹配),单词边界用\b即可:
SELECT folder FROM 表名 WHERE folder ~* '\bOld\b';
SQL Server
低版本无需额外依赖的写法:
通过判断Old前后是否为非字母字符,覆盖所有场景:
SELECT folder FROM 表名 WHERE folder LIKE '%[^a-zA-Z]Old[^a-zA-Z]%' OR folder LIKE 'Old[^a-zA-Z]%' OR folder LIKE '%[^a-zA-Z]Old' OR folder = 'Old';
2016及以上版本开启CLR正则支持的写法:
SELECT folder FROM 表名 WHERE dbo.RegexMatch(folder, '\bOld\b', 'IgnoreCase') = 1;
- 以上所有写法都会直接返回完整的
folder字段匹配值,无需额外处理 - 如果需要严格区分大小写,可修改对应配置:如PostgreSQL将
~*改为~,MySQL在REGEXP后添加BINARY关键字
内容的提问来源于stack exchange,提问作者Adam Craven
相关产品推荐
相关产品推荐

