Du kan ikke gøre dette i regexp alene, fordi regexp ikke understøtter matematik på indfangede grupper, selvom de alle er numeriske tegn. Så du skal hente gruppen, der repræsenterer etagenummeret, regne ud og splejse den ind igen:
SELECT regexp_replace('B12F34', 'B(\d+)F(\d+)', 'Building \1 - Floor ') ||
((regexp_matches('B12F34', '[0-9]+$'))[1]::int + 10)::text;
Ikke særlig effektiv på grund af de to regexp-kald. En anden mulighed er bare at hente de to tal i en underforespørgsel og samle strengen i hovedforespørgslen:
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;