如何在PostgreSQL中用单次regexp_replace替换多个字符串值
单步REGEXP_REPLACE实现多替换方案
你可以通过构造包含所有待替换模式的正则表达式,结合条件替换逻辑,用一次REGEXP_REPLACE调用完成所有操作。以下是针对主流数据库的实现:
PostgreSQL
SELECT REGEXP_REPLACE( 'fd_val__pharmacy_1_2_3_text', '(fd_)|(__)|(_[123])', CASE WHEN \2 IS NOT NULL THEN '_' ELSE '' END, 'g' ) AS result;
正则逻辑说明:
(fd_):匹配前缀fd_,替换为空(__):匹配双下划线,替换为单下划线(_[123]):匹配_1、_2、_3,替换为空'g'参数表示全局替换所有匹配项
MySQL 8.0+
SELECT REGEXP_REPLACE( 'fd_val__pharmacy_1_2_3_text', '(fd_)|(__)|(_[123])', CASE WHEN SUBSTRING_INDEX(SUBSTRING_INDEX(REGEXP_SUBSTR('fd_val__pharmacy_1_2_3_text', '(fd_)|(__)|(_[123])', 1, ORDINAL_POSITION), '|', -1), ')', 1) = '__' THEN '_' ELSE '' END, 1, 0 ) AS result;
两种写法执行后都会得到预期结果:val_pharmacy_text
内容的提问来源于stack exchange,提问作者user1463065
相关产品推荐
相关产品推荐

