SUBSTRING
La función SUBSTRING (o su alias SUBSTR) extrae una porción de una cadena a partir de una posición dada.
Sintaxis
-- Desde una posición hasta el final
SUBSTRING(cadena, posicion)
-- Desde una posición con longitud específica
SUBSTRING(cadena, posicion, longitud)
-- Sintaxis alternativa con FROM/FOR
SUBSTRING(cadena FROM posicion)
SUBSTRING(cadena FROM posicion FOR longitud)Las posiciones empiezan en 1 (no en 0).
Ejemplo básico
SELECT SUBSTRING('MySQL Tutorial', 7) AS resultado;| resultado |
|---|
| Tutorial |
SELECT SUBSTRING('MySQL Tutorial', 1, 5) AS resultado;| resultado |
|---|
| MySQL |
Posiciones negativas
Una posición negativa cuenta desde el final de la cadena:
SELECT SUBSTRING('MySQL Tutorial', -8) AS resultado;| resultado |
|---|
| Tutorial |
SELECT SUBSTRING('Hola mundo', -5, 3) AS resultado;| resultado |
|---|
| mun |
Extraer partes de nombres de productos
SELECT
nombre,
SUBSTRING(nombre, 1, 6) AS primeros_6
FROM productos
LIMIT 5;| nombre | primeros_6 |
|---|---|
| iPhone 15 Pro | iPhone |
| MacBook Air M2 | MacBoo |
| AirPods Pro | AirPod |
| iPad Air | iPad A |
| Apple Watch Series 9 | Apple |
Extraer dominio de email
SELECT
email,
SUBSTRING(email, INSTR(email, '@') + 1) AS dominio
FROM clientes
LIMIT 5;| dominio | |
|---|---|
| maria.garcia@email.com | email.com |
| carlos.rodriguez@email.com | email.com |
| laura.lopez@email.com | email.com |
| pedro.fernandez@email.com | email.com |
| ana.martinez@email.com | email.com |
Extraer usuario de email
SELECT
email,
SUBSTRING(email, 1, INSTR(email, '@') - 1) AS usuario
FROM clientes
LIMIT 5;| usuario | |
|---|---|
| maria.garcia@email.com | maria.garcia |
| carlos.rodriguez@email.com | carlos.rodriguez |
| laura.lopez@email.com | laura.lopez |
| pedro.fernandez@email.com | pedro.fernandez |
| ana.martinez@email.com | ana.martinez |
SUBSTRING con NULL
SELECT SUBSTRING(NULL, 1, 5) AS resultado;| resultado |
|---|
| NULL |
SUBSTRING vs LEFT vs RIGHT
| Función | Uso |
|---|---|
LEFT(cadena, n) | Equivale a SUBSTRING(cadena, 1, n) |
RIGHT(cadena, n) | Equivale a SUBSTRING(cadena, -n) |
SUBSTRING(cadena, pos, len) | Extrae desde cualquier posición |
En el siguiente artículo veremos SUBSTRING_INDEX para extraer partes delimitadas.
Escrito por Eduardo Lázaro
