PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So ersetzen Sie die erfasste Gruppe durch einen ausgewerteten Ausdruck (Hinzufügen eines ganzzahligen Werts zur Erfassungsgruppe)

Sie können dies nicht allein in regexp tun, da regexp keine Mathematik für erfasste Gruppen unterstützt, selbst wenn es sich um numerische Zeichen handelt. Sie müssen also die Gruppe finden, die die Stockwerksnummer darstellt, rechnen und sie wieder einfügen:

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

Wegen der beiden Regexp-Aufrufe nicht sehr effizient. Eine andere Möglichkeit besteht darin, einfach die beiden Zahlen in einer Unterabfrage abzurufen und die Zeichenfolge in der Hauptabfrage zusammenzusetzen:

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;