sql >> Database >  >> RDS >> PostgreSQL

Hoe een vastgelegde groep te vervangen door een geëvalueerde uitdrukking (een geheel getal toevoegen aan de vast te leggen groep)

Je kunt dit niet alleen in regexp doen, omdat regexp geen wiskunde ondersteunt voor vastgelegde groepen, zelfs als het allemaal numerieke tekens zijn. Dus je moet de groep krijgen die het verdiepingsnummer vertegenwoordigt, de wiskunde doen en het er weer in splitsen:

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

Niet erg efficiënt vanwege de twee regexp-aanroepen. Een andere optie is om gewoon de twee getallen in een subquery te krijgen en de string in de hoofdquery samen te voegen:

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;



  1. Hoe kolomwaarden in één door komma's gescheiden waarde te krijgen

  2. De PostgreSQL-upgrade ontwarren

  3. Oracle View versus tabellen samenvoegen in Oracle

  4. 4 manieren om NULL te vervangen door een andere waarde in MySQL