如果您想一次性替换多个字符串,当然可以嵌套REPLACE函数,例如。像这样:
SELECT REPLACE(REPLACE(REPLACE(foo, 'apple', 'fruit'), 'banana', 'fruit'), 'lettuce', 'vegetable')
FROM bar
如果必须进行大量替换,您的代码将变得难看且难以阅读。有多替换功能吗?哪个可能需要2个数组作为参数?可以肯定的是,我熟悉TRANSLATE函数,但正如我的示例所示,我想替换整个单词,而不仅仅是单个字符。
我正在寻找清洁度,而不是性能,所以我接受了您的建议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');
奇怪的是,这不是标准功能,对于下一个发行版可能是个好主意?谢谢大家的建议!