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 dos SOUNDEX() y devuelve un valor entre 0 y 4, donde 4 indica 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".