TRIM

La función TRIM elimina espacios en blanco, o cualquier otro carácter que le indiques, del inicio y del final de una cadena. Es una de las funciones de limpieza de texto más utilizadas en MySQL, porque los datos que llegan desde formularios, importaciones de archivos o integraciones con otros sistemas casi siempre arrastran espacios sobrantes que conviene eliminar antes de almacenarlos o compararlos.

El problema que resuelve es muy concreto pero muy frecuente. Un usuario escribe " Madrid " en un campo de ciudad, o un fichero CSV trae valores con tabulaciones al final, y de pronto una búsqueda por 'Madrid' no encuentra ese registro porque, para la base de datos, " Madrid " y "Madrid" son cadenas distintas. TRIM normaliza ese texto y evita esa clase de errores silenciosos. A lo largo de este artículo veremos su sintaxis completa, cómo recortar por un solo lado, cómo eliminar caracteres distintos del espacio y en qué situaciones reales conviene aplicarla.

Sintaxis

TRIM tiene una forma simple, que recorta espacios de ambos lados, y una forma completa que permite elegir el lado y el carácter a eliminar. Ambas se muestran a continuación.

-- Eliminar espacios de ambos lados
TRIM(cadena)
 
-- Sintaxis completa
TRIM([{BOTH | LEADING | TRAILING} [caracter] FROM] cadena)

Las tres palabras clave que controlan el lado del recorte tienen un significado claro, y BOTH es el valor que se aplica si no especificas ninguno:

  • BOTH (predeterminado): elimina de ambos lados
  • LEADING: solo del inicio
  • TRAILING: solo del final

Ejemplo básico

En su uso más sencillo, TRIM recibe una cadena con espacios alrededor y devuelve la versión recortada. Veamos el caso más directo:

SELECT TRIM('   Hola mundo   ') AS resultado;
resultado
Hola mundo

Como en el resultado los espacios no se aprecian a simple vista, una forma habitual de comprobar que el recorte funciona es envolver el texto entre corchetes con CONCAT. Así se ve con claridad dónde empieza y termina la cadena:

SELECT
    CONCAT('[', '   espacios   ', ']') AS original,
    CONCAT('[', TRIM('   espacios   '), ']') AS trimmed;
originaltrimmed
[ espacios ][espacios]

LEADING, TRAILING y BOTH

La forma completa permite recortar solo por un lado. Esto es útil cuando quieres conservar, por ejemplo, los espacios finales pero eliminar los iniciales. El siguiente ejemplo aplica las tres variantes sobre la misma cadena para que se vea la diferencia:

SELECT
    CONCAT('[', TRIM(LEADING FROM '   Hola   '), ']') AS leading,
    CONCAT('[', TRIM(TRAILING FROM '   Hola   '), ']') AS trailing,
    CONCAT('[', TRIM(BOTH FROM '   Hola   '), ']') AS both_sides;
leadingtrailingboth_sides
[Hola ][ Hola][Hola]

Observa cómo LEADING deja intactos los espacios del final, TRAILING los del inicio y BOTH elimina ambos. Elegir la variante correcta depende de qué parte del texto consideres significativa.

Eliminar caracteres específicos

La gran ventaja de TRIM sobre LTRIM y RTRIM es que no se limita a los espacios: puede eliminar cualquier carácter que indiques antes de FROM. Esto abre la puerta a limpiezas muy concretas, como quitar asteriscos decorativos:

SELECT TRIM(BOTH '*' FROM '***Hola***') AS resultado;
resultado
Hola

Un caso muy práctico es eliminar ceros a la izquierda de un código almacenado como texto, algo común cuando se importan referencias o identificadores con relleno:

SELECT TRIM(LEADING '0' FROM '00042') AS resultado;
resultado
42

También sirve para retirar signos de puntuación sobrantes al final de un texto, como los puntos suspensivos de un título mal formateado:

SELECT TRIM(TRAILING '.' FROM 'Hola...') AS resultado;
resultado
Hola

Limpiar datos de productos

En un escenario real, TRIM se aplica directamente sobre las columnas de una tabla para mostrar o procesar los valores sin espacios. El siguiente ejemplo recorre algunos productos y muestra su nombre recortado entre corchetes para confirmar que no arrastran espacios:

-- Simular datos sucios con espacios
SELECT
    nombre,
    CONCAT('[', TRIM(nombre), ']') AS limpio
FROM productos
LIMIT 3;
nombrelimpio
iPhone 15 Pro[iPhone 15 Pro]
MacBook Air M2[MacBook Air M2]
AirPods Pro[AirPods Pro]

TRIM en WHERE

Cuando sospechas que algunos registros tienen espacios involuntarios, aplicar TRIM en la cláusula WHERE permite encontrarlos igualmente, comparando la versión recortada con el valor que buscas. Así una búsqueda no falla por culpa de un espacio invisible:

-- Buscar ignorando espacios extra
SELECT nombre, precio
FROM productos
WHERE TRIM(nombre) = 'iPhone 15 Pro';

Hay que tener presente, no obstante, que aplicar una función sobre la columna en el WHERE impide que MySQL use un índice sobre esa columna, lo que puede ralentizar la consulta en tablas grandes. Por eso, más que parchear cada búsqueda, lo ideal es limpiar los datos una sola vez.

TRIM en UPDATE

La forma definitiva de resolver el problema de los espacios es corregir los datos en origen con un UPDATE que aplique TRIM a toda la columna. A partir de ahí, las búsquedas ya no necesitarán recortar nada:

-- Limpiar espacios de todos los nombres
-- UPDATE productos SET nombre = TRIM(nombre);
-- UPDATE clientes SET email = TRIM(email);

Conviene ejecutar este tipo de limpieza con cuidado y, si es posible, dentro de una transacción o tras un respaldo, ya que modifica datos de forma permanente.

TRIM vs LTRIM vs RTRIM

MySQL ofrece tres funciones de recorte, y conviene saber cómo se relacionan. La siguiente tabla muestra que LTRIM y RTRIM son, en esencia, casos particulares de TRIM:

FunciónEquivalente
TRIM(cadena)TRIM(BOTH FROM cadena)
LTRIM(cadena)TRIM(LEADING FROM cadena)
RTRIM(cadena)TRIM(TRAILING FROM cadena)

La diferencia clave es que TRIM puede eliminar cualquier carácter, mientras que LTRIM y RTRIM solo eliminan espacios. Si únicamente necesitas quitar espacios por un lado, las versiones específicas son más concisas; si necesitas más control, TRIM es la opción completa.

Errores comunes

El malentendido más extendido es creer que TRIM elimina cualquier tipo de carácter en blanco. En realidad, sin especificar un carácter, solo elimina el espacio normal (código 32). Las tabulaciones, los saltos de línea o los espacios de ancho no separable (como los que a veces copia un navegador) no se tocan. Para esos casos hay que combinar TRIM con REPLACE o recurrir a expresiones regulares.

Otro error frecuente es pasar más de un carácter a la cláusula de recorte esperando que elimine cualquiera de ellos. El argumento que va antes de FROM se interpreta como una subcadena completa que se elimina solo si aparece tal cual en el extremo, no como un conjunto de caracteres individuales. Si necesitas quitar varios caracteres distintos, tendrás que anidar varios TRIM o usar otra estrategia.

Cuándo usar TRIM

TRIM es la herramienta idónea siempre que recibas texto de fuentes poco fiables (formularios, importaciones, copiar y pegar) y quieras normalizarlo antes de guardarlo o compararlo. Es especialmente recomendable aplicarlo en el momento de la inserción, de modo que los datos queden limpios desde el principio y no tengas que recortarlos en cada consulta posterior. Cuando solo necesites recortar espacios por un único lado, valora usar LTRIM o RTRIM, que expresan esa intención de forma más directa.

En el siguiente artículo veremos LTRIM y RTRIM, las dos variantes que recortan por un solo lado.

Escrito por Eduardo Lázaro