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);
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.
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
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;