Aprende SQL · lección gratuita

Lección 10 · Funciones de texto

Resumen

Las funciones de texto manipulan cadenas: cambian mayúsculas, extraen fragmentos, buscan posiciones, reemplazan y concatenan. Son esenciales para limpiar datos (nombres con espacios, formatos inconsistentes) y para construir etiquetas legibles en reportes. SQLite trabaja sobre TEXT con un conjunto compacto de funciones que se combinan entre sí.

Sintaxis / Conceptos

Índices base 1 en SUBSTR e INSTR

A diferencia de muchos lenguajes de programación, en SQL las posiciones de cadena empiezan en 1. SUBSTR(s, 1, 1) es el primer carácter. Con índice negativo cuentas desde el final: SUBSTR('correo', -3) devuelve los últimos 3 caracteres ('reo'). Si omites el largo, SUBSTR toma desde inicio hasta el final.

Extraer la primera palabra (patrón INSTR + SUBSTR)

Para obtener el nombre de pila a partir de 'Elena Ríos', buscas el primer espacio con INSTR(nombre, ' ') y cortas hasta antes de él: SUBSTR(nombre, 1, INSTR(nombre, ' ') - 1). Este patrón es muy frecuente para separar campos compuestos.

Concatenación y NULL

Cuidado: en SQLite, concatenar con || y un valor NULL produce NULL ('a' || NULLNULL). Si una columna puede ser NULL al concatenar (típico tras un LEFT JOIN), envuélvela en COALESCE(col, '') para no perder toda la cadena. Esto se ve en la lección 12.

Normalización con UPPER/LOWER

Para comparar texto sin importar el caso, transforma ambos lados: WHERE LOWER(pais) = 'perú'. SQLite por defecto compara TEXT sensible al caso para caracteres no-ASCII, por eso normalizar con LOWER/UPPER da resultados consistentes.

SELECT nombre, UPPER(cargo) AS cargo_upper, LENGTH(nombre) AS largo FROM empleados LIMIT 5

Ejemplos

-- Construir una etiqueta legible por empleado y extraer su nombre de pila.
-- INSTR localiza el primer espacio; SUBSTR corta hasta antes de él.
SELECT
  nombre,
  UPPER(nombre)                                AS en_mayusculas,
  LENGTH(nombre)                               AS largo,
  SUBSTR(nombre, 1, INSTR(nombre, ' ') - 1)    AS nombre_pila,
  nombre || ' — ' || cargo                     AS etiqueta
FROM empleados
ORDER BY id
LIMIT 8;

-- REPLACE para normalizar: generar un "slug" simple del nombre del producto.
-- Reemplazamos espacios por guiones y pasamos a minúsculas.
SELECT
  nombre,
  LOWER(REPLACE(nombre, ' ', '-')) AS slug
FROM productos
ORDER BY id
LIMIT 6;

-- Código de cliente: primera letra de la empresa + dos letras del país.
SELECT
  empresa,
  pais,
  UPPER(SUBSTR(empresa, 1, 1)) || '/' || UPPER(SUBSTR(pais, 1, 2)) AS codigo
FROM clientes
ORDER BY id
LIMIT 6;

-- Generar un correo ficticio: primera palabra del nombre en minúsculas + dominio.
SELECT
  nombre,
  LOWER(SUBSTR(nombre, 1, INSTR(nombre, ' ') - 1)) || '@nexus.com' AS correo
FROM empleados
ORDER BY id
LIMIT 6;
💡 Recuerda que SUBSTR e INSTR usan índices base 1. El bug típico es restar 1 de más o de menos al cortar por separador. Y REPLACE cambia todas las apariciones, no solo la primera: si quieres reemplazar una sola, necesitas lógica con SUBSTR.

Cheatsheet

FunciónQué hace
UPPER(s) / LOWER(s)Mayúsculas / minúsculas
LENGTH(s)Cantidad de caracteres
SUBSTR(s, i, n)Subcadena desde i (base 1), n caracteres
INSTR(s, sub)Posición (base 1) de sub, o 0 si no está
REPLACE(s, a, b)Cambia todas las ocurrencias de a por b
TRIM(s) / LTRIM / RTRIMQuita espacios (ambos lados / izquierda / derecha)
`a \\b`Concatena cadenas

---

← Funciones numéricas y de redondeoFechas y tiempo →

Ver todas las lecciones de Aprende SQL →