sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgres:udtræk tekst op til det N'te tegn i en streng

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}|.*) 


  1. SQLAlchemy-arv virker ikke

  2. MySQL Group_Concat() vs T-SQL String_Agg()

  3. MYSQL - tyrkisk karakter

  4. Hvordan grupperer jeg på kontinuerlige områder