RIGHT
La función RIGHT en MySQL extrae un número específico de caracteres desde el final (derecha) de una cadena. Es una de las funciones de manipulación de texto más utilizadas cuando necesitas obtener sufijos, extensiones de archivo, códigos postales, los últimos dígitos de un número de teléfono o cualquier porción final de un valor almacenado en tus tablas.
A diferencia de SUBSTRING, que requiere especificar una posición inicial y una longitud, RIGHT simplifica la tarea cuando solo te interesa el extremo derecho de la cadena. Internamente, MySQL calcula la posición de inicio automáticamente a partir de la longitud total del texto, lo que hace que tu código sea más legible y fácil de mantener.
RIGHT trabaja a nivel de caracteres, no de bytes. Esto significa que funciona correctamente con caracteres multibyte como acentos, eñes y emojis, siempre que la columna utilice una codificación como utf8mb4. Si necesitas trabajar a nivel de bytes en lugar de caracteres, puedes recurrir a la variante RIGHT combinada con LENGTH para controlar ese comportamiento.
Sintaxis
La sintaxis de RIGHT es directa y solo requiere dos argumentos: la cadena de origen y la cantidad de caracteres que quieres extraer desde el final.
RIGHT(cadena, longitud)El parámetro cadena puede ser un literal de texto, el nombre de una columna o el resultado de otra función de cadena. El parámetro longitud es un entero positivo que indica cuántos caracteres se extraerán contando desde la derecha. Si longitud es mayor o igual que la longitud total de la cadena, MySQL devuelve la cadena completa sin generar ningún error. Si longitud es 0, el resultado es una cadena vacía. Si cualquiera de los argumentos es NULL, la función devuelve NULL.
Ejemplo básico
Para entender el funcionamiento fundamental de RIGHT, comencemos con ejemplos sencillos usando cadenas literales. Estos casos muestran cómo la función cuenta caracteres desde el extremo derecho del texto.
SELECT RIGHT('MySQL Tutorial', 8) AS resultado;| resultado |
|---|
| Tutorial |
En este caso, los 8 caracteres finales de la cadena "MySQL Tutorial" forman la palabra "Tutorial". Veamos otro ejemplo con una frase diferente.
SELECT RIGHT('Hola mundo', 5) AS resultado;| resultado |
|---|
| mundo |
MySQL cuenta exactamente 5 caracteres desde el final, devolviendo "mundo". Observa que el espacio antes de "mundo" no se incluye porque solo se pidieron 5 caracteres.
Extraer dominios de email
Uno de los usos más frecuentes de RIGHT en proyectos reales es extraer el dominio de una dirección de correo electrónico. Para lograrlo, se combina RIGHT con CHAR_LENGTH e INSTR. La idea es encontrar la posición de la arroba y luego extraer todo lo que hay a su derecha.
SELECT nombre, email,
RIGHT(email, CHAR_LENGTH(email) - INSTR(email, '@')) AS dominio
FROM clientes
LIMIT 5;| nombre | dominio | |
|---|---|---|
| María | maria.garcia@email.com | email.com |
| Carlos | carlos.rodriguez@gmail.com | gmail.com |
| Laura | laura.lopez@outlook.es | outlook.es |
| Pedro | pedro.fernandez@yahoo.com | yahoo.com |
| Ana | ana.martinez@hotmail.com | hotmail.com |
La expresión CHAR_LENGTH(email) - INSTR(email, '@') calcula cuántos caracteres hay después de la arroba. INSTR devuelve la posición del carácter @, y al restar esa posición de la longitud total se obtiene exactamente la cantidad de caracteres que forman el dominio. Este patrón es muy útil para generar reportes de distribución de proveedores de correo entre tus usuarios.
Puedes llevar esto un paso más allá y agrupar por dominio para obtener estadísticas:
SELECT
RIGHT(email, CHAR_LENGTH(email) - INSTR(email, '@')) AS dominio,
COUNT(*) AS total_clientes
FROM clientes
GROUP BY dominio
ORDER BY total_clientes DESC
LIMIT 5;| dominio | total_clientes |
|---|---|
| gmail.com | 1245 |
| outlook.es | 893 |
| hotmail.com | 567 |
| yahoo.com | 234 |
| email.com | 178 |
Enmascarar datos sensibles
Otra aplicación habitual de RIGHT es mostrar solo los últimos dígitos de información sensible como números de teléfono, tarjetas de crédito o documentos de identidad. Esto permite al usuario identificar el registro sin exponer el dato completo, cumpliendo con buenas prácticas de privacidad.
SELECT
nombre,
CONCAT('***-***-', RIGHT(telefono, 4)) AS telefono_parcial
FROM clientes
LIMIT 5;| nombre | telefono_parcial |
|---|---|
| María | --5678 |
| Carlos | --6789 |
| Laura | --7890 |
| Pedro | --8901 |
| Ana | --9012 |
El mismo patrón se aplica a números de tarjeta de crédito, donde por normativas de seguridad solo deben mostrarse los últimos cuatro dígitos:
SELECT
nombre,
CONCAT('**** **** **** ', RIGHT(numero_tarjeta, 4)) AS tarjeta_enmascarada
FROM metodos_pago
WHERE cliente_id = 42;| nombre | tarjeta_enmascarada |
|---|---|
| María García | **** **** **** 3847 |
RIGHT con longitud mayor que la cadena
Cuando el valor del parámetro longitud supera la cantidad de caracteres que tiene la cadena, MySQL no genera un error. Simplemente devuelve la cadena completa tal cual. Este comportamiento es seguro y evita que tengas que validar la longitud antes de llamar a la función.
SELECT RIGHT('Hola', 100) AS resultado;| resultado |
|---|
| Hola |
La cadena "Hola" tiene solo 4 caracteres, pero al pedir 100 caracteres desde la derecha, MySQL devuelve los 4 disponibles. Esto es especialmente útil cuando trabajas con columnas de longitud variable y no puedes predecir la longitud exacta de cada valor.
RIGHT con valores NULL y cadena vacía
Es importante entender cómo se comporta RIGHT con valores especiales. Si la cadena es NULL, el resultado siempre será NULL, independientemente de la longitud solicitada. Si la cadena está vacía, el resultado es una cadena vacía.
SELECT
RIGHT(NULL, 5) AS con_null,
RIGHT('', 5) AS con_vacia,
RIGHT('Prueba', 0) AS longitud_cero;| con_null | con_vacia | longitud_cero |
|---|---|---|
| NULL |
Este comportamiento es coherente con el tratamiento de NULL en todas las funciones de cadena de MySQL. Si tienes columnas que pueden contener valores nulos, considera usar IFNULL o COALESCE para proporcionar un valor por defecto antes de aplicar RIGHT.
Extraer extensiones de archivo
Cuando almacenas nombres de archivo en tu base de datos, RIGHT combinado con otras funciones te permite extraer la extensión. Este enfoque es común en sistemas de gestión de documentos o plataformas de almacenamiento.
SELECT
nombre_archivo,
RIGHT(nombre_archivo, CHAR_LENGTH(nombre_archivo) - LOCATE('.', nombre_archivo)) AS extension
FROM documentos
WHERE LOCATE('.', nombre_archivo) > 0
LIMIT 5;| nombre_archivo | extension |
|---|---|
| informe_anual.pdf | |
| foto_perfil.jpg | jpg |
| datos_ventas.xlsx | xlsx |
| contrato_2026.docx | docx |
| logo_empresa.png | png |
La función LOCATE encuentra la posición del punto, y luego calculamos cuántos caracteres hay a la derecha de esa posición. El filtro WHERE LOCATE('.', nombre_archivo) > 0 asegura que solo procesamos archivos que tienen una extensión.
Combinar LEFT y RIGHT
Usar LEFT y RIGHT juntos permite crear abreviaciones de nombres largos o extraer porciones específicas de una cadena desde ambos extremos. Esta técnica es útil en interfaces donde el espacio de visualización es limitado y necesitas mostrar una versión resumida del texto.
SELECT
nombre,
CONCAT(LEFT(nombre, 3), '...', RIGHT(nombre, 3)) AS abreviado
FROM productos
WHERE CHAR_LENGTH(nombre) > 10
LIMIT 5;| nombre | abreviado |
|---|---|
| iPhone 15 Pro | iPh...Pro |
| MacBook Air M2 | Mac... M2 |
| Apple Watch Series 9 | App...s 9 |
También puedes combinar RIGHT con REPLACE o TRIM para limpiar datos antes de extraer la porción final. Por ejemplo, si tus códigos de producto terminan siempre con un sufijo de categoría de 3 letras:
SELECT
codigo_producto,
RIGHT(codigo_producto, 3) AS sufijo_categoria,
CASE RIGHT(codigo_producto, 3)
WHEN 'ELE' THEN 'Electrónica'
WHEN 'ROA' THEN 'Ropa'
WHEN 'ALI' THEN 'Alimentación'
WHEN 'HOG' THEN 'Hogar'
ELSE 'Otros'
END AS categoria
FROM productos
LIMIT 5;| codigo_producto | sufijo_categoria | categoria |
|---|---|---|
| PRD-00142-ELE | ELE | Electrónica |
| PRD-00287-ROA | ROA | Ropa |
| PRD-00391-ALI | ALI | Alimentación |
| PRD-00455-HOG | HOG | Hogar |
| PRD-00512-ELE | ELE | Electrónica |
RIGHT en cláusula WHERE
Además de usarla en la lista de columnas del SELECT, puedes usar RIGHT directamente en la cláusula WHERE para filtrar registros según los caracteres finales de una columna. Ten en cuenta que esta operación aplica la función a cada fila, lo que impide el uso de índices y puede afectar al rendimiento en tablas grandes.
SELECT nombre, telefono
FROM clientes
WHERE RIGHT(telefono, 4) = '0000';Esta consulta encuentra todos los clientes cuyo teléfono termina en "0000". Si necesitas hacer este tipo de filtrado con frecuencia en tablas con millones de registros, considera crear una columna generada con los últimos dígitos e indexarla.
Errores comunes
Uno de los errores más habituales es confundir RIGHT con LEFT. LEFT extrae desde el inicio de la cadena, mientras que RIGHT extrae desde el final. Otro error frecuente es pasar un valor negativo como longitud, lo que hace que MySQL devuelva una cadena vacía en lugar de generar un error explícito.
También es común olvidar que RIGHT opera sobre caracteres y no sobre palabras. Si necesitas extraer la última palabra de una frase, RIGHT por sí sola no es suficiente. Para ese caso necesitas combinarla con SUBSTRING_INDEX:
SELECT
SUBSTRING_INDEX('Base de datos relacional', ' ', -1) AS ultima_palabra;| ultima_palabra |
|---|
| relacional |
Cuándo usar RIGHT
RIGHT es la opción ideal cuando conoces de antemano cuántos caracteres necesitas extraer desde el final de una cadena, o cuando puedes calcular esa longitud dinámicamente con otras funciones. Es perfecta para extraer sufijos fijos como extensiones de archivo, códigos de país, últimos dígitos de identificadores y dominios de correo electrónico.
Si necesitas extraer una porción de la cadena que no está al principio ni al final, SUBSTRING ofrece mayor flexibilidad al permitirte especificar tanto la posición de inicio como la longitud. Para el extremo izquierdo, LEFT es la función complementaria directa. Juntas, LEFT y RIGHT cubren la mayoría de escenarios simples de extracción de texto.
En el siguiente artículo veremos LOWER para convertir a minúsculas.
Escrito por Eduardo Lázaro
