SQL查询中替换文本指定字符串并保留其余内容的实现方法
实现方案
核心逻辑是匹配Pro后紧跟的固定标签片段,直接替换为空即可,无需复杂的字符串切割,不会改动其他无关内容。
你之前用SUBSTRING无法实现是因为切割需要同时定位Pro的起始位置和后续标签的结束位置,遇到同一字符串存在多处匹配的场景处理复杂度很高,替换方案更简洁稳定。
通用方案(适配支持正则替换的数据库:MySQL 8.0+/PostgreSQL/Oracle 11g+/SQL Server 2017+)
用REGEXP_REPLACE函数一次匹配两种目标场景:
SELECT REGEXP_REPLACE(你的字段名, 'Pro<strong>fession(al|nel)</strong>', 'Pro') AS 处理后字段 FROM 你的表名;
正则里的(al|nel)会自动匹配两种后缀情况,只会删除Pro后的标签片段,其余内容完全保留。
老版本数据库兼容方案(不支持正则的场景)
因为需要匹配的后缀只有固定2种,直接嵌套REPLACE函数即可,性能比正则更优:
SELECT REPLACE( REPLACE(你的字段名, 'Pro<strong>fessional</strong>', 'Pro'), 'Pro<strong>fessionnel</strong>', 'Pro' ) AS 处理后字段 FROM 你的表名;
效果验证示例
你可以先执行测试语句确认输出符合预期:
-- 测试输入:"Blabla Pro<strong>fessionnel</strong> Blabla" SELECT REGEXP_REPLACE('Blabla Pro<strong>fessionnel</strong> Blabla', 'Pro<strong>fession(al|nel)</strong>', 'Pro') -- 输出结果:"Blabla Pro Blabla"
内容的提问来源于stack exchange,提问作者Noemie
相关产品推荐
相关产品推荐

