PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como substituir o grupo capturado pela expressão avaliada (adicionando um valor inteiro ao grupo de captura)


Você não pode fazer isso em regexp sozinho porque regexp não suporta matemática em grupos capturados, mesmo que sejam todos caracteres numéricos. Então você tem que pegar o grupo que representa o número do andar, fazer as contas e juntar de volta:
SELECT regexp_replace('B12F34', 'B(\d+)F(\d+)', 'Building \1 - Floor ') ||
       ((regexp_matches('B12F34', '[0-9]+$'))[1]::int + 10)::text;

Não muito eficiente por causa das duas chamadas regexp. Outra opção é apenas pegar os dois números em uma subconsulta e montar a string na consulta principal:
SELECT format('Building %L - Floor %L', m.num[1], (m.num[2])::int + 10)
FROM (
  SELECT regexp_matches('B12F34', '[0-9]+', 'g') AS num) m;