如何在MySQL中替换含COMPRIMIDO的字符串仅保留该词?
优化包含COMPRIMIDO的字符串统一处理方案
针对嵌套REPLACE函数应对多变体效率不足的问题,推荐以下两种更优实现方式:
方法一:条件判断匹配(全SQL兼容)
利用CASE WHEN结合LIKE实现批量匹配,无需逐个枚举变体,适用于所有支持SQL标准的数据库:
CASE WHEN medication_type LIKE '%COMPRIMIDO%' THEN 'COMPRIMIDO' ELSE medication_type END AS medication_result
优势:兼容性极强,不管medication_type后面跟多少种后缀变体,只要包含COMPRIMIDO就统一替换,代码简洁易维护,性能远优于多层嵌套REPLACE。
方法二:正则表达式替换(适用于支持正则的数据库)
如果你的数据库支持正则替换(如PostgreSQL、MySQL 8.0+、SQL Server 2017+等),可以用正则精准匹配并替换:
PostgreSQL/MySQL 8.0+
REGEXP_REPLACE(medication_type, '^COMPRIMIDO\s+.+$', 'COMPRIMIDO') AS medication_result
(注:^COMPRIMIDO\s+.+$匹配以COMPRIMIDO开头、后跟空白字符+任意内容的字符串;若要匹配所有包含COMPRIMIDO的字符串,可改为'.*COMPRIMIDO.*')
SQL Server 2017+
REGEXP_REPLACE(medication_type, '^COMPRIMIDO\s+.+$', 'COMPRIMIDO') AS medication_result
优势:代码更简洁,能精准匹配特定格式的字符串,处理复杂变体时灵活性更强。
内容的提问来源于stack exchange,提问作者Mariana
相关产品推荐
相关产品推荐

