是否可以在一个函数调用中执行多次替换?

问题描述 投票:0回答:1

如果您想一次性替换多个字符串,当然可以嵌套REPLACE函数,例如。像这样:

SELECT REPLACE(REPLACE(REPLACE(foo, 'apple', 'fruit'), 'banana', 'fruit'), 'lettuce', 'vegetable')
FROM bar

如果必须进行大量替换,您的代码将变得难看且难以阅读。有多替换功能吗?哪个可能需要2个数组作为参数?可以肯定的是,我熟悉TRANSLATE函数,但正如我的示例所示,我想替换整个单词,而不仅仅是单个字符。

sql postgresql replace
1个回答
0
投票

我正在寻找清洁度,而不是性能,所以我接受了您的建议404。

这是我编写的功能:

CREATE OR REPLACE FUNCTION multi_replace(  
                                        _string                 TEXT,
                                        VARIADIC _param_args    TEXT[]
                                        )                                     
RETURNS TEXT AS    
$BODY$    
    DECLARE
            _old        RECORD;
            _new        TEXT;    
    BEGIN
        FOR _old in     (
                        SELECT 
                            _param_args[i]                      AS tekst, 
                            i                                   AS indexnummer
                        FROM  generate_series(1, 5, 2) i
                        )                           
                        LOOP 
                            _new    := COALESCE(_param_args[_old.indexnummer+1], '');
                            _string := REPLACE(_string, _old.tekst, _new);
                        END LOOP;    
        RETURN _string;            
    END;         
$BODY$
  LANGUAGE plpgsql VOLATILE

这是一个示例调用:

select multi_replace('I love to drink milk in the morning', 'milk', 'beer', 'morning', 'evening', 'I', 'we');

奇怪的是,这不是标准功能,对于下一个发行版可能是个好主意?谢谢大家的建议!

© www.soinside.com 2019 - 2024. All rights reserved.