как заменить abcd / FR / efgh на xxxx / FR / xxxx - PullRequest
0 голосов
/ 23 мая 2019

У меня есть этот varchar: abcd / FR / efgh, и я хочу заменить его на xxxx / FR / xxxx, например:

abcd/FR/efgh => xxxx/FR/xxxx
dijfh/BE/edodfgh => xxxxx/BE/xxxxxxx
/BE/as => /BE/as

Любая идея, как я могу сделать это в Oracle?

1 Ответ

1 голос
/ 23 мая 2019

Используя несколько строковых функций, таких как rpad, instr, substr и length:

select 
  case 
    when s not like '%_/%/_%' then s
    else 
      rpad('x', instr(s, '/', 1, 1) - 1, 'x') 
      || '/' || 
      substr(s, instr(s, '/', 1, 1) + 1, instr(s, '/', 1, 2) - instr(s, '/', 1, 1) - 1)
      || '/' ||
      rpad('x', length(s) - instr(s, '/', 1, 2), 'x') 
  end s  
from tablename

Замените s именем вашей колонки.
См. демо .
Rsults:

> | S                |
> | :--------------- |
> | xxxx/FR/xxxx     |
> | xxxxx/BE/xxxxxxx |
> | /BE/as           |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...