sql >> Database >  >> RDS >> PostgreSQL

Postgres:extraheer tekst tot het N-de teken in een string

U kunt de patroonovereenkomst gebruiken functie in Postgres.

Ontdek eerst een patroon om alles vast te leggen tot de vierde > karakter.

Om je patroon te starten, moet je een subgroep maken die niet > . vastlegt tekens en één > karakter:

([^>]*>)

Leg dat dan vier keer vast om bij de vierde instantie van > te komen

([^>]*>){4}

Vervolgens moet je dat in een groep stoppen, zodat de match alle vier instanties terugbrengt:

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

en plaats een begin van het tekenreekssymbool om er zeker van te zijn dat het alleen overeenkomt vanaf het begin van de tekenreeks (niet in het midden):

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

Hier is een werkend regex101-voorbeeld daarvan!

Zodra je het patroon hebt dat teruggeeft wat je wilt in het eerste groepselement (wat je kunt zien in de online regex in het rechterpaneel), moet je het terug selecteren in de SQL.

In Postgres, de substringfunctie heeft een optie om een ​​regex-patroon te gebruiken om tekst uit de invoer te extraheren met behulp van een 'from'-instructie in de substring.

Om te eindigen, zet alles bij elkaar!

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

Bekijk hier een werkende sqlfiddle

Als u de hele tekenreeks wilt matchen wanneer er minder dan vier exemplaren van > . zijn , gebruik deze reguliere expressie:

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


  1. Hoe waarden in een PHP-array invoegen in een MySQL-tabel?

  2. Wat is de beste manier om de minimumwaarde uit verschillende kolommen te selecteren?

  3. Hoe u de ANSI_NULLS-instelling van uw sessie in SQL Server kunt controleren?

  4. Mysql-query om rijen dynamisch naar kolommen te converteren op basis van twee kolommen