Как 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;
и только тогда это работает.