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

Postgres:извлича текст до N-тия знак в низ

Можете да използвате съвпадение на шаблон функция в Postgres.

Първо измислете модел за да улови всичко до четвъртия > характер.

За да започнете своя модел, трябва да създадете подгрупа, която улавя не > символи и един > знак:

([^>]*>)

След това заснемете това четири пъти, за да стигнете до четвъртото копие на >

([^>]*>){4}

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

(([^>]*>){4})

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

^(([^>]*>){4})

Ето един работещ regex101 пример за това!

След като имате модела, който ще върне това, което искате в първия групов елемент (който можете да кажете в онлайн регулярния израз в десния страничен панел), трябва да го изберете обратно в SQL.

В Postgres, функцията за подниз има опция за използване на модел на регулярен израз за извличане на текст от входа с помощта на оператор „от“ в подниза.

За да завършите, съберете всичко!

select substring(filter_type from '^(([^>]*>){4})')
from filter_table

Вижте работещ sqlfiddle тук

Ако искате да съпоставите целия низ, когато има по-малко от четири екземпляра на > , използвайте този регулярен израз:

 ^(([^>]*>){4}|.*)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защитата на ниво ред не работи за собственика на таблицата

  2. Функция COPY в PostgreSQL

  3. Има ли изчакване за неактивни PostgreSQL връзки?

  4. Редактиране на файл от Sublime Text 2 от командния ред при SSH във Vagrant Virtual Box (Linux Ubuntu Machine)

  5. PostgreSQL - изберете count(*) за редове, където е изпълнено условие