Вам нужен еще один символ, который можно использовать в качестве разделителя, например, знак трубы (|).
Допустим, таблица определена как
create table myTable (
myColumn varchar(400)
);
Добавить значение для теста:
insert into myTable (myColumn) values
('Test^^^^^^^^test^^^^^^^test^^^^^^test^^^^^test^^^^test^^^test^^test^test');
Затем выполните умную замену с использованием другого разделителя
select replace(replace(replace(myColumn, '^^', '^|^'), '|^^', ''), '^|^', '^')
from myTable;
Результат:
Test^test^test^test^test^test^test^test^test^test
Вместо использования одного символьного разделителя вы можете использовать строку, в которой вы уверены, что она не будет встречаться в значениях, например, 'xy'. Следующий запрос даст те же результаты:
select replace(replace(replace(myColumn, '^^', '^xy^'), 'xy^^', ''), '^xy^', '^')
from myTable;