Как заменить один или несколько последовательных символов одним символом в DB2 - PullRequest
2 голосов
/ 22 марта 2011

Я использую DB2 LUW 9.5.В поле у ​​меня есть значение, подобное этому:

Test^test^^test^^^^test^^test^test

В запросе SELECT я хотел бы заменить дублированный ^ только одним ^.Это приведет к:

Test^test^test^test^test^test

Разделитель известен и статичен (может быть жестко закодирован).Не знаете ли вы, как получить желаемый результат с помощью функций DB2?

Спасибо

1 Ответ

3 голосов
/ 22 марта 2011

Вам нужен еще один символ, который можно использовать в качестве разделителя, например, знак трубы (|).

Допустим, таблица определена как

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...