PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да замените уловената група с оценен израз (добавяне на цяло число към уловената група)

Не можете да направите това само в regexp, тъй като regexp не поддържа математически изчисления на уловени групи, дори ако всички те са цифрови знаци. Така че трябва да получите групата, която представлява номера на етажа, да направите изчислението и да я свържете обратно:

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

Не е много ефективен поради двете извиквания на regexp. Друг вариант е просто да получите двете числа в подзаявка и да сглобите низа в основната заявка:

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. В Postgresql, принудително уникално при комбинация от две колони

  2. Подобряване на производителността на OFFSET в PostgreSQL

  3. Команда за размер на Postgres DB

  4. модели на миграция на производствени данни при непрекъсната доставка

  5. Django+Postgres ФАТАЛНО:съжалявам, вече има твърде много клиенти