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

Postgres:estrae il testo fino all'ennesimo carattere in una stringa

Puoi utilizzare la corrispondenza del modello funzione in Postgres.

Per prima cosa, individua uno schema per catturare tutto fino al quarto > carattere.

Per iniziare il tuo modello dovresti creare un sottogruppo che acquisisca non > caratteri e un > carattere:

([^>]*>)

Quindi catturalo quattro volte per arrivare alla quarta istanza di >

([^>]*>){4}

Quindi, dovrai racchiuderlo in un gruppo in modo che la corrispondenza riporti tutte e quattro le istanze:

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

e metti un simbolo di inizio stringa per una buona misura per assicurarti che corrisponda solo dall'inizio della stringa (non nel mezzo):

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

Ecco un esempio funzionante di regex101!

Una volta che hai il modello che restituirà ciò che desideri nel primo elemento del gruppo (che puoi vedere nella regex online sul pannello laterale destro), devi selezionarlo nuovamente nell'SQL.

In Postgres, la funzione di sottostringa ha un'opzione per utilizzare un modello regex per estrarre il testo dall'input utilizzando un'istruzione "da" nella sottostringa.

Per finire, metti tutto insieme!

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

Guarda un sqlfiddle funzionante qui

Se vuoi far corrispondere l'intera stringa ogni volta che ci sono meno di quattro istanze di > , usa questa espressione regolare:

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