Du kan använda mönstermatchning funktion i Postgres.
Först ta reda på ett mönster för att fånga allt upp till den fjärde
För att starta ditt mönster bör du skapa en undergrupp som fångar icke > tecken och en
> tecken:
([^>]*>)
Fånga sedan det fyra gånger för att komma till den fjärde instansen av >
([^>]*>){4}
Sedan måste du slå in det i en grupp så att matchen tar tillbaka alla fyra instanserna:
(([^>]*>){4})
och sätt en början av sträng-symbol för att se till att den bara matchar från början av strängen (inte i mitten):
^(([^>]*>){4})
Här är ett fungerande exempel på regex101 på det!
När du har mönstret som kommer att returnera det du vill ha i det första gruppelementet (vilket du kan se i online-regexet på den högra sidopanelen), måste du välja det tillbaka i SQL.
I Postgres, understrängsfunktionen har ett alternativ att använda ett regexmönster för att extrahera text ur inmatningen med hjälp av en "från"-sats i delsträngen.
Sätt ihop allt för att avsluta!
select substring(filter_type from '^(([^>]*>){4})')
from filter_table
Se en fungerande sqlfiddle här
Om du vill matcha hela strängen när det finns mindre än fyra instanser av >
, använd detta reguljära uttryck:
^(([^>]*>){4}|.*)