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

Вземете второ съвпадение от резултатите от regexp_matches

Можете да използвате REGEXP_REPLACE :

SELECT REGEXP_REPLACE('1234567 - 7654321 - some - more - text', '^\d+[^\d]+(\d+).*$', '\1');

Изход

7654321

Този регулярен израз търси низ, започващ с определен брой цифри (^\d+ ), последвано от някои нецифрени знаци ([^\d]+ ) и след това друга група цифри ((\d+) ), последвано от известен брой знаци до края на низа (.*$ ). () около втората група от цифрови знаци прави това група за прихващане, която след това можем да посочим в заместващия низ с \1 . От REGEXP_REPLACE замества само частите от низа, които съответстват на регулярния израз, необходимо е да има регулярен израз, който съответства на цялото низ, за ​​да го замените само с желаните данни.

Актуализация

Ако има потенциално знаци преди първия набор от цифри, трябва да промените регулярния израз на

^[^\d]*\d+[^\d]+(\d+).*$

Актуализация 2

Ако е възможно в началото да има само един набор от числа, трябва да направим съвпадението на първата част незадължително. Можем да направим това с група без прихващане:

^[^\d]*(?:\d+[^\d]+)?(\d+).*$

Това прави съвпадението на първия набор от цифри незадължително, така че ако не съществува (т.е. има само един набор от цифри), регулярният израз пак ще съвпада. Чрез използване на група без прихващане (добавяне на ?: до началото на групата, не е необходимо да променяме заместващия низ от \1 . Актуализиран SQLFiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Клаузата UPDATE-FROM в jOOQ хвърля очакване за CTE поле

  2. Как документирате кода на вашата база данни, за да видите зависимостите между обектите на базата данни?

  3. Съвети за съхраняване на резервни копия на PostgreSQL в Google Cloud (GCP)

  4. PostgreSQL:Намиране на разрешение за елемент, преминаване до root

  5. Не може да се намери входна точка с име 'InterlockedIncrement' в DLL 'kernel32.dll' - [имейл защитен] 64 бита