Funciones de Texto Avanzadas
Las funciones de texto avanzadas en SQL permiten realizar manipulaciones complejas en cadenas de caracteres, incluyendo búsqueda fonética, indexación y transformación de texto. A continuación, veremos las funciones más utilizadas en MySQL y PostgreSQL, ya que SQLite tiene soporte limitado para algunas de ellas.
1. SOUNDEX() y DIFFERENCE() - Comparación Fonética (Solo en MySQL y SQL Server) #
SOUNDEX()convierte una cadena en un código fonético basado en su pronunciación en inglés.DIFFERENCE()compara dosSOUNDEX()y devuelve un valor entre0y4, donde4indica mayor similitud.
Ejemplo: #
1-- MySQL 2SELECT SOUNDEX('roberto'), SOUNDEX('ruberto'); 3SELECT DIFFERENCE('roberto', 'ruberto');
Esto ayuda a comparar nombres que suenan similar.
2. TOTSVECTOR() y TOTSQUERY() - Indexación y Búsqueda en Texto Completo (PostgreSQL) #
Permiten realizar búsquedas eficientes en grandes volúmenes de texto.
Ejemplo: #
1-- PostgreSQL 2SELECT TO_TSVECTOR('español', 'Este es un curso avanzado de SQL'); 3SELECT TO_TSQUERY('español', 'curso & SQL');
Esto indexa la oración y permite buscar términos específicos.
3. STRINGAGG() y GROUPCONCAT() - Concatenación Agrupada #
Estas funciones concatenan valores de una columna en un solo resultado.
Ejemplo: #
1-- PostgreSQL 2SELECT STRING_AGG(nombre, ', ') FROM empleados;
1-- MySQL 2SELECT GROUP_CONCAT(nombre SEPARATOR ', ') FROM empleados;
Esto devuelve una lista de nombres separados por comas.
4. REGEXPREPLACE() y REGEXPLIKE() - Expresiones Regulares #
Permiten buscar y reemplazar patrones en cadenas de texto.
Ejemplo: #
1-- PostgreSQL 2SELECT REGEXP_REPLACE('ABC123XYZ', '[0-9]+', '###', 'g');
1-- MySQL 2SELECT REGEXP_LIKE('abc123', '^[a-z]+[0-9]+$');
El primer ejemplo reemplaza los números con ###, y el segundo verifica si la cadena cumple con el patrón.
5. LEFT(), RIGHT() y SUBSTRING() - Extracción de Subcadenas #
Permiten extraer una parte de una cadena de texto.
Ejemplo: #
1-- MySQL, PostgreSQL 2SELECT LEFT('Hola Mundo', 4); -- Devuelve 'Hola' 3SELECT RIGHT('Hola Mundo', 5); -- Devuelve 'Mundo' 4SELECT SUBSTRING('Hola Mundo', 6, 5); -- Devuelve 'Mundo'
6. TRANSLATE() y REPLACE() - Reemplazo de Caracteres #
TRANSLATE() reemplaza caracteres individuales, mientras que REPLACE() sustituye subcadenas completas.
Ejemplo: #
1-- PostgreSQL 2SELECT TRANSLATE('abcdef', 'abc', '123');
1-- MySQL, PostgreSQL 2SELECT REPLACE('Hola Mundo', 'Mundo', 'SQL');
TRANSLATE() cambia abc por 123, y REPLACE() reemplaza "Mundo" por "SQL".
Resumen del tema
Conceptos clave #
- Comparación Fonética:
SOUNDEX()yDIFFERENCE()evalúan la similitud acústica de palabras, útil para búsquedas tolerantes a variaciones ortográficas en nombres. - Búsqueda en Texto Completo (Full-Text Search):
TO_TSVECTOR()yTO_TSQUERY()en PostgreSQL analizan, lematizan e indexan textos para búsquedas lingüísticas complejas. - Expresiones Regulares:
REGEXP_LIKE()yREGEXP_REPLACE()permiten validar patrones sofisticados y realizar sustituciones dinámicas avanzadas. - Transformación de Caracteres:
TRANSLATE()efectúa reemplazos uno a uno de múltiples caracteres simultáneamente, mientras queREPLACE()sustituye cadenas completas.
Qué debes recordar #
Para búsquedas complejas en grandes volúmenes de texto o validaciones avanzadas, las funciones de expresiones regulares y Full-Text Search superan ampliamente las capacidades del operador LIKE.