sql >> Base de Datos >  >> RDS >> PostgreSQL

Postgres:extraiga texto hasta el enésimo carácter en una cadena

Puede usar la coincidencia de patrones función en Postgres.

Primero descubre un patrón para capturar todo hasta el cuarto > personaje.

Para comenzar su patrón, debe crear un subgrupo que capture no > caracteres y un > carácter:

([^>]*>)

Luego capture eso cuatro veces para llegar a la cuarta instancia de >

([^>]*>){4}

Luego, deberá envolver eso en un grupo para que la coincidencia recupere las cuatro instancias:

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

y coloque un símbolo de inicio de cadena por si acaso para asegurarse de que solo coincida desde el principio de la cadena (no en el medio):

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

¡Aquí hay un ejemplo de regex101 que funciona!

Una vez que tenga el patrón que devolverá lo que desea en el primer elemento del grupo (que puede ver en la expresión regular en línea en el panel lateral derecho), debe seleccionarlo nuevamente en el SQL.

En Postgres, la función de subcadena tiene una opción para usar un patrón regex para extraer texto de la entrada usando una declaración 'from' en la subcadena.

Para terminar, ¡junta todo!

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

Vea un sqlfiddle en funcionamiento aquí

Si desea hacer coincidir la cadena completa siempre que haya menos de cuatro instancias de > , utilice esta expresión regular:

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