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

Sådan erstatter du fanget gruppe med evalueret udtryk (tilføj en heltalsværdi til fangegruppen)

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;



  1. DB Design giver brugeren mulighed for at definere produkter, produktspecifikationer og lade sig selv indsætte ordrer

  2. PHP - Er det god praksis at cache MYSQL-forespørgsler i en txt-fil?

  3. Er der en MySQL svarende til PostgreSQL array_to_string

  4. Glassfish Admin Console kaster java.lang.IllegalStateException ved oprettelse af JDBC Pool