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;
nombreprimeros_6
iPhone 15 ProiPhone
MacBook Air M2MacBoo
AirPods ProAirPod
iPad AiriPad A
Apple Watch Series 9Apple

Extraer dominio de email

SELECT
    email,
    SUBSTRING(email, INSTR(email, '@') + 1) AS dominio
FROM clientes
LIMIT 5;
emaildominio
maria.garcia@email.comemail.com
carlos.rodriguez@email.comemail.com
laura.lopez@email.comemail.com
pedro.fernandez@email.comemail.com
ana.martinez@email.comemail.com

Extraer usuario de email

SELECT
    email,
    SUBSTRING(email, 1, INSTR(email, '@') - 1) AS usuario
FROM clientes
LIMIT 5;
emailusuario
maria.garcia@email.commaria.garcia
carlos.rodriguez@email.comcarlos.rodriguez
laura.lopez@email.comlaura.lopez
pedro.fernandez@email.compedro.fernandez
ana.martinez@email.comana.martinez

SUBSTRING con NULL

SELECT SUBSTRING(NULL, 1, 5) AS resultado;
resultado
NULL

SUBSTRING vs LEFT vs RIGHT

FunciónUso
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