有没有办法避免一系列的批量替换?即
select
replace(replace(replace(replace( replace(replace(replace(replace(replace(replace(replace(replace(replace(
some_string
, '-α', '-alpha'), 'α', 'alpha'), '-β', '-beta'), 'β', 'beta'), '-γ', '-gamma'), 'γ', 'gamma'), '-δ', 'delta'), 'δ', 'delta'), '</', '<'), '<sub>'), '<SUB>'), '<i>'), '<sup>')
from dual提前感谢!
发布于 2020-08-03 21:41:00
不幸的是没有。我的一个同事最近写了一个PL/SQL函数来做这件事,大概是这样的:
PACKAGE BODY string_utils IS
FUNCTION multi_replace
( p_string VARCHAR2
, p_search1 VARCHAR2
, p_replace1 VARCHAR2 DEFAULT NULL
, p_search2 VARCHAR2 DEFAULT NULL
, p_replace2 VARCHAR2 DEFAULT NULL
, p_search3 VARCHAR2 DEFAULT NULL
, p_replace3 VARCHAR2 DEFAULT NULL
, p_search4 VARCHAR2 DEFAULT NULL
, p_replace4 VARCHAR2 DEFAULT NULL
, p_search5 VARCHAR2 DEFAULT NULL
, p_replace5 VARCHAR2 DEFAULT NULL
, p_search6 VARCHAR2 DEFAULT NULL
, p_replace6 VARCHAR2 DEFAULT NULL
, p_search7 VARCHAR2 DEFAULT NULL
, p_replace7 VARCHAR2 DEFAULT NULL
, p_search8 VARCHAR2 DEFAULT NULL
, p_replace8 VARCHAR2 DEFAULT NULL
, p_search9 VARCHAR2 DEFAULT NULL
, p_replace9 VARCHAR2 DEFAULT NULL
) RETURN VARCHAR2
IS
l_result_str VARCHAR2(32767) := p_string;
BEGIN
IF p_search1 IS NOT NULL THEN
l_result_str := REPLACE(l_result_str, p_search1, p_replace1);
END IF;
IF p_search2 IS NOT NULL THEN
l_result_str := REPLACE(l_result_str, p_search2, p_replace2);
END IF;
IF p_search3 IS NOT NULL THEN
l_result_str := REPLACE(l_result_str, p_search3, p_replace3);
END IF;
IF p_search4 IS NOT NULL THEN
l_result_str := REPLACE(l_result_str, p_search4, p_replace4);
END IF;
IF p_search5 IS NOT NULL THEN
l_result_str := REPLACE(l_result_str, p_search5, p_replace5);
END IF;
IF p_search6 IS NOT NULL THEN
l_result_str := REPLACE(l_result_str, p_search6, p_replace6);
END IF;
IF p_search7 IS NOT NULL THEN
l_result_str := REPLACE(l_result_str, p_search7, p_replace7);
END IF;
IF p_search8 IS NOT NULL THEN
l_result_str := REPLACE(l_result_str, p_search8, p_replace8);
END IF;
IF p_search9 IS NOT NULL THEN
l_result_str := REPLACE(l_result_str, p_search9, p_replace9);
END IF;
RETURN l_result_str;
END multi_replace;
END;https://stackoverflow.com/questions/63230445
复制相似问题