MySQL技术问询:如何移除字段中特定字符串并返回部分内容
解决字段末尾移除固定字符串的SQL方案
嗨,这个需求太常见啦!我之前做项目的时候也遇到过类似情况,就是要把字段末尾特定的后缀去掉,只保留前面的核心内容。针对你说的字段偶尔会附加 - New(看你示例里的格式是带前置空格的)的情况,我整理了几种主流数据库的实现方法,都很稳妥:
通用思路
核心逻辑很简单:先判断字段是否以目标后缀结尾,如果是,就截取掉后缀部分;如果不是,直接返回原字段。这样不会误改那些没有后缀的字段。
MySQL/MariaDB 实现
两种方式任你选,正则表达式更简洁,CASE判断更直观:
方法1:正则表达式替换(推荐)
SELECT REGEXP_REPLACE(your_column, ' - New$', '') AS cleaned_column FROM your_table;
这里的$是正则里的「末尾匹配」符号,确保只会替换字段最后面的 - New,不会影响字段中间可能出现的相同字符串。
方法2:CASE条件判断
SELECT CASE -- 注意` - New`是6个字符:空格+减号+空格+New WHEN RIGHT(your_column, 6) = ' - New' THEN LEFT(your_column, LENGTH(your_column) - 6) ELSE your_column END AS cleaned_column FROM your_table;
SQL Server 实现
可以用条件判断,也可以用正则(SQL Server 2017及以上版本支持):
方法1:CASE条件判断
SELECT CASE WHEN your_column LIKE '% - New' THEN SUBSTRING(your_column, 1, LEN(your_column) - 6) ELSE your_column END AS cleaned_column FROM your_table;
LIKE '% - New'用来匹配以 - New结尾的字段,再用SUBSTRING截取掉最后6个字符。
方法2:正则替换(SQL Server 2022+)
SELECT REGEXP_REPLACE(your_column, ' - New$', '') AS cleaned_column FROM your_table;
PostgreSQL 实现
PostgreSQL对正则的支持很友好,两种方式都顺手:
方法1:正则替换
SELECT REGEXP_REPLACE(your_column, ' - New$', '') AS cleaned_column FROM your_table;
方法2:条件判断截取
SELECT CASE WHEN RIGHT(your_column, 6) = ' - New' THEN SUBSTRING(your_column FROM 1 FOR LENGTH(your_column) - 6) ELSE your_column END AS cleaned_column FROM your_table;
注意事项
如果你实际的固定后缀是- New(前面没有空格),记得把匹配字符串改成'- New',对应的长度改成5,调整代码里的数字和匹配内容就行啦!
内容的提问来源于stack exchange,提问作者Doug
相关产品推荐
相关产品推荐

