Я использую REPLACE
функция в оракуле для замены значений в моей строке как;
SELECT REPLACE('THE NEW VALUE IS #VAL1#','#VAL1#','55') from dual
Таким образом, это в порядке для замены одного значения, но что относительно 20 +, должен я использовать 20 + REPLACE
функционируйте или есть ли более практическое решение.
Все идеи приветствуются.
Имейте в виду, что
SELECT REPLACE(REPLACE('TEST123','123','456'),'45','89') FROM DUAL;
заменит 123 на 456, а затем обнаружит, что он может заменить 45 на 89. Для функции, которая имела эквивалентный результат, она должна была бы дублировать приоритет (т. Е. Заменять строки в том же порядке).
Аналогичным образом, взяв строку «ABCDEF» и указав ей заменить «ABC» на «123» и «CDE» на «xyz», все равно придется учитывать приоритет, чтобы определить, перешла ли она к «123EF» или ABxyzF '.
Короче говоря, было бы сложно придумать что-то общее, что было бы проще, чем вложенная REPLACE (хотя что-то, что больше похоже на функцию стиля sprintf, было бы полезным дополнением).
Принятый ответ на , как заменить несколько строк вместе в Oracle , предлагает использовать вложенные операторы REPLACE
, и я не думаю, что это есть это лучший способ.
Если вы собираетесь интенсивно использовать это, вы можете написать свою собственную функцию:
CREATE TYPE t_text IS TABLE OF VARCHAR2(256);
CREATE FUNCTION multiple_replace(
in_text IN VARCHAR2, in_old IN t_text, in_new IN t_text
)
RETURN VARCHAR2
AS
v_result VARCHAR2(32767);
BEGIN
IF( in_old.COUNT <> in_new.COUNT ) THEN
RETURN in_text;
END IF;
v_result := in_text;
FOR i IN 1 .. in_old.COUNT LOOP
v_result := REPLACE( v_result, in_old(i), in_new(i) );
END LOOP;
RETURN v_result;
END;
, а затем использовать ее следующим образом:
SELECT multiple_replace( 'This is #VAL1# with some #VAL2# to #VAL3#',
NEW t_text( '#VAL1#', '#VAL2#', '#VAL3#' ),
NEW t_text( 'text', 'tokens', 'replace' )
)
FROM dual
Это текст с некоторыми токенами для замены
Если все ваши токены имеют тот же формат ( '# VAL' || i || '#'
), вы можете опустить параметр in_old
и использовать вместо него счетчик циклов.