PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Postgres:extrai texto até o enésimo caractere em uma string


Você pode usar a correspondência de padrões função no Postgres.

Descobrir primeiro um padrão para capturar tudo até o quarto > personagem.

Para iniciar seu padrão, você deve criar um subgrupo que capture não > caracteres e um > personagem:
([^>]*>)

Em seguida, capture isso quatro vezes para chegar à quarta instância de >
([^>]*>){4}

Em seguida, você precisará agrupar isso em um grupo para que a correspondência traga de volta todas as quatro instâncias:
(([^>]*>){4})

e coloque um símbolo de início de string para garantir que ele corresponda apenas ao início da String (não no meio):
^(([^>]*>){4})

Aqui está um exemplo de regex101 funcional disso!

Depois de ter o padrão que retornará o que você deseja no primeiro elemento do grupo (que você pode dizer no regex online no painel do lado direito), você precisa selecioná-lo novamente no SQL.

No Postgres, a função substring tem a opção de usar um padrão regex para extrair texto da entrada usando uma instrução 'from' na substring.

Para finalizar, junte tudo!
select substring(filter_type from '^(([^>]*>){4})')
from filter_table

Veja um sqlfiddle funcionando aqui

Se você quiser corresponder a string inteira sempre que houver menos de quatro instâncias de > , use esta expressão regular:
 ^(([^>]*>){4}|.*)