PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come sostituire il gruppo acquisito con un'espressione valutata (aggiungendo un valore intero al gruppo di acquisizione)

Non puoi farlo solo in regexp perché regexp non supporta la matematica sui gruppi acquisiti anche se sono tutti caratteri numerici. Quindi devi prendere il gruppo che rappresenta il numero del piano, fare i calcoli e ricollegarlo:

SELECT regexp_replace('B12F34', 'B(\d+)F(\d+)', 'Building \1 - Floor ') ||
       ((regexp_matches('B12F34', '[0-9]+$'))[1]::int + 10)::text;

Non molto efficiente a causa delle due chiamate regexp. Un'altra opzione è semplicemente ottenere i due numeri in una sottoquery e assemblare la stringa nella query principale:

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;