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

Postgres:wyodrębnij tekst do N-tego znaku w ciągu

Możesz użyć dopasowywania wzorców funkcja w Postgresie.

Najpierw wymyśl wzór aby uchwycić wszystko do czwartego > postać.

Aby rozpocząć swój wzorzec, powinieneś utworzyć podgrupę, która przechwytuje inne niż > znaków i jeden > znak:

([^>]*>)

Następnie przechwyć to cztery razy, aby uzyskać czwartą instancję >

([^>]*>){4}

Następnie musisz zapakować to w grupę, aby dopasowanie przywróciło wszystkie cztery wystąpienia:

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

i umieść symbol początku ciągu znaków, aby upewnić się, że pasuje tylko od początku ciągu (nie w środku):

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

Oto działający przykład regex101!

Kiedy już masz wzorzec, który zwróci to, co chcesz w pierwszym elemencie grupy (o czym możesz się dowiedzieć po wyrażeniu regularnym online w prawym panelu), musisz wybrać go z powrotem w SQL.

W Postgresie funkcja podłańcuchów ma opcję użycia wzorca regex do wyodrębnienia tekstu z danych wejściowych za pomocą instrukcji 'from' w podłańcuchu.

Aby zakończyć, złóż to wszystko razem!

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

Zobacz działający sqlfiddle tutaj

Jeśli chcesz dopasować cały ciąg, gdy są mniej niż cztery wystąpienia > , użyj tego wyrażenia regularnego:

 ^(([^>]*>){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. Jak podzielić String i wstawić go jako nową linię w tej samej tabeli?

  2. Dlaczego null||null zwraca wartość null, ale concat(null,null) zwraca pusty ciąg w postgresie?

  3. Jak tworzyć i usuwać bazy danych i tabele w PostgreSQL

  4. Rozszerzanie wiersza za pomocą * nie jest tutaj obsługiwane

  5. PostgreSQL - powtarzanie wierszy z LIMIT OFFSET