Du kan bruge mønstermatching funktion i Postgres.
Først skal du finde et mønster for at fange alt op til den fjerde > Karakter.
For at starte dit mønster skal du oprette en undergruppe, der fanger ikke >
tegn og én > tegn:
([^>]*>)
Fang det derefter fire gange for at komme til den fjerde forekomst af >
([^>]*>){4}
Derefter skal du pakke det ind i en gruppe, så kampen bringer alle fire tilfælde tilbage:
(([^>]*>){4})
og indsæt et start af streng-symbol for at sikre, at det kun matcher fra begyndelsen af strengen (ikke i midten):
^(([^>]*>){4})
Her er et fungerende eksempel på regex101!
Når du har det mønster, der vil returnere det, du vil have i det første gruppeelement (som du kan se ved online regex i højre sidepanel), skal du vælge det tilbage i SQL.
I Postgres er understrengsfunktionen har en mulighed for at bruge et regex-mønster til at trække tekst ud af inputtet ved hjælp af en 'fra'-sætning i understrengen.
Sæt det hele sammen for at afslutte!
vælg understreng(filtertype fra '^(([^>]*>){4})') fra filtertabel
Se en fungerende sqlfiddle her
Hvis du vil matche hele strengen, når der er mindre end fire forekomster af >
, brug dette regulære udtryk:
^(([^>]*>){4}|.*)