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;
nombreemaildominio
Maríamaria.garcia@email.comemail.com
Carloscarlos.rodriguez@gmail.comgmail.com
Lauralaura.lopez@outlook.esoutlook.es
Pedropedro.fernandez@yahoo.comyahoo.com
Anaana.martinez@hotmail.comhotmail.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;
dominiototal_clientes
gmail.com1245
outlook.es893
hotmail.com567
yahoo.com234
email.com178

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;
nombretelefono_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;
nombretarjeta_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_nullcon_vacialongitud_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_archivoextension
informe_anual.pdfpdf
foto_perfil.jpgjpg
datos_ventas.xlsxxlsx
contrato_2026.docxdocx
logo_empresa.pngpng

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;
nombreabreviado
iPhone 15 ProiPh...Pro
MacBook Air M2Mac... M2
Apple Watch Series 9App...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_productosufijo_categoriacategoria
PRD-00142-ELEELEElectrónica
PRD-00287-ROAROARopa
PRD-00391-ALIALIAlimentación
PRD-00455-HOGHOGHogar
PRD-00512-ELEELEElectró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