Cadenassolo PostgreSQL

SPLIT_PART

Divide una cadena por un separador y devuelve la parte con el número que necesites.

Sintaxis

SPLIT_PART(<texto>, <separador>, <número de parte>)

Corta el texto en trozos por el separador y devuelve el trozo con el número indicado, contando desde 1. Un número negativo cuenta desde el final: -1 es la última parte. Útil para textos con una estructura previsible: el dominio de un correo, el prefijo del país de un teléfono, una parte de una ruta.

Datos para los ejemplos

employees

namedepartmentsalarybonusphone
Emmabackend1200300+44 7700 900123
Liambackend1000NULLNULL
Oliviafrontend1350150+44 7700 900456
Noahfrontend950NULL+44 7700 900789
Sophiadesign1200200NULL

Estas tablas ya están creadas en el entorno de pruebas y los ejemplos de abajo las usan. ¿Quieres repetirlo en tu propia base de datos? Copia el SQL.

Usuario y dominio de un correo
SELECT SPLIT_PART('emma@example.com', '@', 1) AS login,
SPLIT_PART('emma@example.com', '@', 2) AS domain;
logindomain
emmaexample.com
La última parte, con un número negativo
SELECT SPLIT_PART('backend/api/v2', '/', -1) AS last_part;
last_part
v2
El prefijo del país en el teléfono
SELECT name, phone,
SPLIT_PART(phone, ' ', 1) AS country_code
FROM employees;
namephonecountry_code
Emma+44 7700 900123+44
LiamNULLNULL
Olivia+44 7700 900456+44
Noah+44 7700 900789+44
SophiaNULLNULL

A diferencia de SUBSTRING, no necesitas saber la longitud del prefijo: se toma todo hasta el primer espacio.

Ten en cuenta

Si no hay ninguna parte con ese número, el resultado es una cadena vacía '', no NULL: SPLIT_PART('a,b', ',', 5).

El número 0 es un error, field position must not be zero: la numeración empieza en 1.

Solo se corta el separador exacto; los espacios de alrededor se quedan: SPLIT_PART('a, b', ',', 2) da b con un espacio al principio. TRIM lo quitará.

Funciones relacionadas