sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man ersätter infångad grupp med utvärderat uttryck (lägger till ett heltalsvärde för fångstgrupp)

Du kan inte göra detta enbart i regexp eftersom regexp inte stöder matematik på infångade grupper även om de alla är numeriska tecken. Så du måste hämta gruppen som representerar våningsnumret, räkna ut och skarva in det igen:

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

Inte särskilt effektivt på grund av de två regexp-anropen. Ett annat alternativ är att bara hämta de två siffrorna i en underfråga och sätta ihop strängen i huvudfrågan:

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. Skapa array i PHP från mysql

  2. Vad är skillnaden mellan USER() och SYS_CONTEXT('USERENV','CURRENT_USER')?

  3. Hur kan jag kombinera flera rader till en kolumn med PostgreSQL?

  4. Varje härledd tabell måste ha sitt eget alias - fel från kombinationen fallande MySQL