Contenido de esta guía
Qué hace SUBSTRING
SUBSTRING extrae una parte de un texto. Debes indicar la cadena, la posición inicial y, cuando la necesitas, la cantidad de caracteres. Sirve para mostrar prefijos, separar códigos conocidos o preparar una vista de datos.
En SQL, la primera posición suele ser 1, no 0. Esta diferencia provoca muchos errores cuando vienes de lenguajes de programación que empiezan a contar desde cero.
Sintaxis básica
SUBSTRING(texto, inicio, cantidad)SUBSTR(texto, inicio, cantidad)SQLite admite substr y también reconoce substring como alias en versiones modernas. PostgreSQL dispone de varias formas de substring. MySQL ofrece SUBSTRING y SUBSTR.
Ejemplo guiado
Queremos mostrar los cinco primeros caracteres de cada nombre de producto:
SELECT nombre,
SUBSTR(nombre, 1, 5) AS inicio
FROM productos
ORDER BY id
LIMIT 6;| nombre | inicio |
|---|---|
| Ratón | Ratón |
| Teclado | Tecla |
| Monitor 24 | Monit |
| Portátil Pro | Portá |
| Auriculares | Auric |
| Monitor 27 | Monit |
Cómo leer los argumentos
nombrees el texto de origen.1indica que la extracción empieza en el primer carácter.5establece el máximo de caracteres.- Si el texto es más corto, SQLite devuelve la parte disponible sin rellenarla.
Extraer no es validar. Que un código tenga un prefijo concreto no garantiza que toda su estructura sea correcta. Utiliza restricciones o reglas de validación cuando necesites asegurar el formato de los datos.
Error frecuente
Empezar en cero
SELECT SUBSTR(nombre, 0, 5) FROM productos;Las posiciones de estas funciones SQL se interpretan desde uno. Utiliza 1 para comenzar en el primer carácter. Algunos motores permiten posiciones negativas con reglas propias, pero no conviene asumir que esa variante es portable.
Comprueba lo aprendido
Crea un prefijo de ciudad
Muestra ciudad y sus tres primeros caracteres con el alias prefijo. Evita ciudades repetidas y ordena alfabéticamente.
Solución razonada
SELECT DISTINCT ciudad, SUBSTR(ciudad, 1, 3) AS prefijo
FROM clientes
ORDER BY ciudad;DISTINCT se aplica a la combinación seleccionada. Cada ciudad aparece una sola vez junto a su prefijo.
Extrae el mes de una fecha almacenada como texto
Muestra id, nombre, fecha_registro y los primeros siete caracteres de la fecha con el alias mes_registro. Ordena por id y limita el resultado a cinco clientes.
Criterio de éxito: el valor derivado conserva el formato AAAA-MM; por ejemplo, 2025-01-08 se convierte en 2025-01.
1, no en 0.SUBSTR(fecha_registro, 1, 7).Solución razonada
SELECT id, nombre, fecha_registro,
SUBSTR(fecha_registro, 1, 7) AS mes_registro
FROM clientes
ORDER BY id
LIMIT 5;| id | nombre | fecha_registro | mes_registro |
|---|---|---|---|
| 1 | Ana Torres | 2025-01-08 | 2025-01 |
| 2 | Luis Martín | 2025-01-12 | 2025-01 |
| 3 | Marta Ruiz | 2025-02-01 | 2025-02 |
| 4 | Diego López | 2025-02-14 | 2025-02 |
| 5 | Sara Gómez | 2025-03-03 | 2025-03 |
La extracción funciona porque los datos de ejemplo usan un formato de longitud fija. SUBSTRING separa caracteres; no interpreta ni valida por sí sola que el texto sea una fecha correcta.
Diferencias entre motores
El nombre, la forma de los argumentos y las variantes con expresiones regulares cambian. Para una lección inicial, utiliza la forma de posición y longitud que admita tu motor. No copies una forma avanzada de PostgreSQL a MySQL o SQLite sin revisarla.
Qué debes recordar
- La primera posición suele ser
1. - La cantidad limita los caracteres devueltos.
- Un texto corto devuelve la parte disponible.
SUBSTRySUBSTRINGno tienen exactamente las mismas variantes en todos los motores.
Conceptos relacionados
Fuentes técnicas consultadas
Se utilizaron para comprobar nombres, posiciones y variantes.