Как REGEXP_REPLACE специальный символ

У меня проблема со следующим регулярным выражением

select REGEXP_REPLACE(declinereasondesc, '(.+)(£)(\d+)', '\1\3 (GBP)') as r from DECLINEREASON t

не соответствует следующим строкам

Too expensive : By less than £100
Too expensive : By more than £200

Ожидаемый результат

Too expensive : By less than 100 (GBP)
Too expensive : By more than 200 (GBP)

РЕДАКТИРОВАТЬ:

скриншот для неверующих

1 ответ

Решение

Сам разобрался, проблема в том, £ как я уверен все подозревали

Решение содержит два шага: сначала получить код символа, даже если вы скопировали вставить £ в select ascii() from dual это не летает. Вы должны выбрать символ, как показано ниже, чтобы получить правильный код.

select ascii(substr(declinereasondesc, 30,1)) from DECLINEREASON t
where declinereasonid = 7;

В моем случае это дало 49827

затем

select REGEXP_REPLACE(declinereasondesc, '(.+)('||chr(49827)||')(\d+)', '\1\3 (GBP)') from DECLINEREASON t;

и только тогда это работает.

Другие вопросы по тегам