Función SUBSTRING en PostgreSQL

La función SUBSTRING en PostgreSQL te permite obtener parte de una cadena indicando desde dónde debe empezar y cuantos caracteres te debe devolver. Esta función está englobada en las denominadas funciones de cadena.

Sintaxis

Escribe la siguiente sintaxis para utilizarlo:

SUBSTRING ( cadena ,posicion_inicio , longitud )
  • SUBSTRING: es el nombre de la función.
  • cadena: cadena de la que se quiere extraer una parte.
  • posicion_inicio: posición donde debe empezar a extraer (empieza desde la posición 1).
  • longitud: cantidad de caracteres que debe extraer desde que empieza.

Ejemplo

Extraer parte de una cadena

En el siguiente ejemplo puedes observar cómo extraemos el apellido de la cadena ‘Miguel Troyano’ indicando que empiece a extraer desde la posición 8. Si no se le indica dónde debe acabar (la longitud) extraerá hasta el final de la cadena:

SELECT 	SUBSTRING ('Miguel Troyano' , 8),
		SUBSTRING ('Miguel Troyano' , 8,7);
Función SUBSTRING en PostgreSQL

Extraer parte de una cadena de un campo

En el siguiente ejemplo extraemos la inicial del campo nombre de la tabla empleados:

SELECT 	nombre, 
		SUBSTRING (nombre , 1, 1) INICIAL
FROM empleados;

Extraer parte de una cadena con una expresión regular

En el siguiente ejemplo extraemos de la cadena ‘Vivo en el número 100’ los número gracias a la expresión regular escrita:

SELECT SUBSTRING ('Vivo en el número 100','([0-9]{1,3})') as Número;
  • ‘Vivo en el número 100’: cadena de donde se van a extraer los números.
  • [0-9]: le indicamos que debe buscar del cero al nuevo.
  • {1,3}: como mínimo debe contener una coincidencia y máximo 3. Si el máximo fuese menor al resultado lo truncaría.

2 comentarios en “Función SUBSTRING en PostgreSQL

  1. Hola buenas tardes
    Excelente tutoría.
    Pero tengo un inconveniente que no puedo resolver, respecto de la función Replace().
    Tengo el siguiente String=’0960′.
    Y necesito solamente reemplazar el primer ‘0’ por un ‘*’ entonces hago lo siguiente:
    select replace(‘0960’, substring(‘0960′,1,1),’*’) as asterisco;
    Pero el resultado es ‘*96*’ y lo que deseo es ‘*960’.
    No puedo lograr que quede como deseo.
    Me podría ayudar con este inconveniente, qué puedo estar haciendo mal.
    Un codial saludo

    1. Hola, si no tienes que comprobar que el primer carácter sea un cero puedes ejecutar esta consulta: SELECT concat(‘*’, substring(‘0960’ FROM 2)) AS asterisco;

Escribir un comentario

Este sitio está protegido por reCAPTCHA y se aplican la política de privacidad y los términos de servicio de Google.