Modelado físico avanzado relacional de bases de datos
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. TO_TSVECTOR() y TO_TSQUERY() - 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. STRING_AGG() y GROUP_CONCAT() - 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. REGEXP_REPLACE() y REGEXP_LIKE() - 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".