PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak zastąpić przechwyconą grupę wyrażeniem ocenianym (dodawanie wartości całkowitej do grupy przechwytywania)

Nie możesz tego zrobić w samym regexp, ponieważ regexp nie obsługuje matematyki na przechwyconych grupach, nawet jeśli wszystkie są znakami numerycznymi. Musisz więc uzyskać grupę, która reprezentuje numer piętra, wykonać obliczenia i połączyć je z powrotem:

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

Niezbyt wydajny z powodu dwóch wywołań regexp. Inną opcją jest po prostu uzyskanie dwóch liczb w podzapytaniu i złożenie ciągu w zapytaniu głównym:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ograniczenie Postgresa

  2. Fabric i Sudo jako inny użytkownik

  3. org.postgresql.util.PSQLException:próba połączenia nie powiodła się

  4. Jak zainstalować klejnot pg PostgreSQL na Ubuntu?

  5. Formularz wyszukiwania nie kieruje do właściwego kontrolera w Rails 5.1