PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgres:Text bis zum N-ten Zeichen in einem String extrahieren

Sie können den Musterabgleich verwenden Funktion in Postgres.

Finde zuerst ein Muster heraus um alles bis zum vierten > zu erfassen Charakter.

Um mit Ihrem Muster zu beginnen, sollten Sie eine Untergruppe erstellen, die nicht > erfasst Zeichen und ein > Zeichen:

([^>]*>)

Erfassen Sie das dann viermal, um zur vierten Instanz von > zu gelangen

([^>]*>){4}

Dann müssen Sie das in eine Gruppe einschließen, damit die Übereinstimmung alle vier Instanzen zurückbringt:

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

und fügen Sie ein Symbol für den Anfang des Strings ein, um sicherzustellen, dass es nur vom Anfang des Strings an übereinstimmt (nicht in der Mitte):

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

Hier ist ein funktionierendes Regex101-Beispiel dafür!

Sobald Sie das Muster haben, das im ersten Gruppenelement das zurückgibt, was Sie wollen (was Sie an der Online-Regex auf der rechten Seite erkennen können), müssen Sie es wieder in SQL auswählen.

In Postgres die Substring-Funktion hat die Option, ein Regex-Muster zu verwenden, um Text aus der Eingabe zu extrahieren, indem eine 'from'-Anweisung in der Teilzeichenfolge verwendet wird.

Fügen Sie zum Schluss alles zusammen!

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

Ein funktionierendes sqlfiddle finden Sie hier

Wenn Sie die gesamte Zeichenfolge abgleichen möchten, wenn weniger als vier Instanzen von > vorhanden sind , verwenden Sie diesen regulären Ausdruck:

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