PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Postgres :extraire le texte jusqu'au nième caractère d'une chaîne

Vous pouvez utiliser la pattern matching fonction dans Postgres.

Déterminez d'abord une régularité pour tout capturer jusqu'au quatrième > personnage.

Pour commencer votre modèle, vous devez créer un sous-groupe qui capture non > caractères, et un > caractère :

([^>]*>)

Capturez ensuite cela quatre fois pour accéder à la quatrième instance de >

([^>]*>){4}

Ensuite, vous devrez regrouper cela dans un groupe afin que la correspondance ramène les quatre instances :

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

et mettez un symbole de début de chaîne pour faire bonne mesure pour vous assurer qu'il ne correspond qu'à partir du début de la chaîne (pas au milieu):

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

Voici un exemple fonctionnel de regex101 !

Une fois que vous avez le modèle qui renverra ce que vous voulez dans le premier élément de groupe (que vous pouvez dire à l'expression régulière en ligne sur le panneau de droite), vous devez le sélectionner dans le SQL.

Dans Postgres, la fonction de sous-chaîne a une option pour utiliser un modèle regex pour extraire le texte de l'entrée en utilisant une instruction 'from' dans la sous-chaîne.

Pour finir, assemblez tout !

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

Voir un sqlfiddle fonctionnel ici

Si vous souhaitez faire correspondre la chaîne entière chaque fois qu'il y a moins de quatre instances de > , utilisez cette expression régulière :

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