LEFT
La función LEFT extrae un número determinado de caracteres desde el inicio (el lado izquierdo) de una cadena. Es la forma más directa de quedarse con el principio de un texto, y resulta muy útil para obtener iniciales, prefijos, generar códigos cortos o enmascarar datos sensibles.
Es importante destacar que LEFT trabaja por caracteres, no por bytes, así que cuenta correctamente las tildes y eñes sin partir un carácter multibyte por la mitad. Funcionalmente equivale a SUBSTRING empezando en la posición 1, pero su sintaxis es más corta y legible para este caso concreto, y por eso se prefiere cuando solo necesitas el comienzo de la cadena. En este artículo veremos su sintaxis, sus usos típicos, qué ocurre en los casos límite y su relación con SUBSTRING y RIGHT.
Sintaxis
LEFT recibe la cadena de origen y el número de caracteres que quieres extraer desde el principio.
LEFT(cadena, longitud)Sus argumentos son:
cadena: la cadena de origenlongitud: número de caracteres a extraer desde la izquierda
Ejemplo básico
En su uso normal, devuelve los primeros caracteres indicados. Aquí se extraen los cinco primeros, que forman la palabra MySQL:
SELECT LEFT('MySQL Tutorial', 5) AS resultado;| resultado |
|---|
| MySQL |
Lo mismo con cualquier otra longitud; los caracteres restantes simplemente se descartan:
SELECT LEFT('Hola mundo', 4) AS resultado;| resultado |
|---|
| Hola |
Obtener iniciales
Pidiendo un solo carácter, LEFT devuelve la inicial de cada valor, algo útil para agrupar o indexar alfabéticamente:
SELECT nombre, LEFT(nombre, 1) AS inicial
FROM productos
LIMIT 5;| nombre | inicial |
|---|---|
| iPhone 15 Pro | i |
| MacBook Air M2 | M |
| AirPods Pro | A |
| iPad Air | i |
| Apple Watch Series 9 | A |
Generar códigos de categoría
Combinando LEFT con UPPER se obtienen códigos cortos en mayúsculas a partir de un nombre, un patrón habitual para crear abreviaturas:
SELECT nombre, UPPER(LEFT(nombre, 3)) AS codigo
FROM categorias;| nombre | codigo |
|---|---|
| Electrónica | ELE |
| Accesorios electrónicos | ACC |
| Hogar inteligente | HOG |
| Audio | AUD |
| Fotografía | FOT |
Agrupar por inicial
Una aplicación analítica interesante es contar cuántos valores empiezan por cada letra, usando LEFT como criterio de GROUP BY junto con COUNT:
SELECT LEFT(nombre, 1) AS inicial, COUNT(*) AS total
FROM productos
GROUP BY inicial
ORDER BY total DESC;Casos límite: longitud mayor que la cadena
Conviene saber cómo se comporta LEFT cuando pides más caracteres de los que hay. En ese caso no falla ni rellena con espacios: simplemente devuelve la cadena completa, sin más:
SELECT LEFT('Hola', 100) AS resultado;| resultado |
|---|
| Hola |
Y, como el resto de funciones de cadena, propaga el valor NULL: si la entrada es nula, el resultado también lo es:
SELECT LEFT(NULL, 5) AS resultado;| resultado |
|---|
| NULL |
Enmascarar datos sensibles
Un uso práctico y muy frecuente es ocultar parte de un dato sensible, mostrando solo su comienzo. Combinando LEFT con CONCAT se revela el principio de un email y se sustituye el resto por asteriscos:
SELECT
nombre,
CONCAT(LEFT(email, 3), '***@***') AS email_oculto
FROM clientes
LIMIT 3;| nombre | email_oculto |
|---|---|
| María | mar***@*** |
| Carlos | car***@*** |
| Laura | lau***@*** |
Esta técnica es útil para mostrar datos en interfaces o registros sin exponer la información completa, aunque para anonimización seria conviene combinarla con otras medidas.
LEFT, SUBSTRING y RIGHT
LEFT es uno de los tres atajos de extracción de MySQL, y conviene saber cómo se relacionan. LEFT toma el principio, RIGHT toma el final, y SUBSTRING es la versión general que extrae desde cualquier posición. De hecho, LEFT(cadena, n) es exactamente equivalente a SUBSTRING(cadena, 1, n); la versión LEFT solo es más concisa para este caso.
Errores comunes
El descuido más habitual es asumir que LEFT recorta o valida la longitud de la cadena. No hace ninguna de las dos cosas: si la cadena es más corta que la longitud pedida, la devuelve entera sin avisar, así que no sirve para garantizar un tamaño fijo. Para eso necesitarías rellenar el resultado con RPAD.
Otro punto a tener en cuenta es que, aunque LEFT cuenta caracteres y respeta UTF-8, el corte se hace por posición de carácter, no por palabras. Extraer "los primeros 6 caracteres" puede partir una palabra por la mitad, como se ve en los ejemplos. Si necesitas cortar por palabras completas, hay que combinarlo con funciones de búsqueda como INSTR.
Cuándo usar LEFT
LEFT es la elección natural siempre que necesites el principio de una cadena: iniciales, prefijos, códigos cortos o enmascarado de datos. Si lo que quieres es el final, usa RIGHT; y si necesitas extraer desde una posición intermedia o con más control, SUBSTRING es la opción completa.
En el siguiente artículo veremos RIGHT, que extrae caracteres desde el final de la cadena.
Escrito por Eduardo Lázaro
