10 Ejercicios resueltos de Funciones de Texto, Números y Fechas en MySQL
Domina las funciones de texto, números y fechas en MySQL con estos 10 ejercicios resueltos. Aprende a manipular cadenas, redondear decimales y calcular intervalos de tiempo paso a paso sobre una tabla de usuarios con datos de prueba listos para ejecutar.
Aprendizaje teórico
Las funciones integradas en MySQL permiten transformar y calcular datos al vuelo durante las consultas, sin alterar la información original guardada en las tablas.
Funciones de texto
Sirven para manipular cadenas de caracteres. Puedes convertir todo a mayúsculas con UPPER, a minúsculas con LOWER o unir varias columnas con CONCAT. Son perfectas para formatear nombres o normalizar cadenas.
Funciones numéricas
Permiten realizar cálculos matemáticos rápidos: redondear valores con ROUND, truncar decimales con TRUNCATE o calcular totales sin delegar el trabajo al backend de tu aplicación.
Funciones de fecha
Estas funciones extraen el año, mes o día de una fecha (YEAR, MONTH, DAY), calculan diferencias entre fechas con DATEDIFF u obtienen la fecha actual con CURDATE.
Base de datos y datos de prueba para los ejercicios
Para resolver y contrastar estos 10 ejercicios, trabajaremos con la tabla usuarios. Si deseas practicar en tu entorno local (MySQL Workbench, phpMyAdmin, DBeaver o la consola terminal), copia y ejecuta este script para crear la tabla e insertar los datos de prueba iniciales:
-- 1. Crear la tabla usuarios
CREATE TABLE IF NOT EXISTS usuarios (
id INT PRIMARY KEY AUTO_INCREMENT,
nombre VARCHAR(50) NOT NULL,
apellido VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
saldo DECIMAL(10, 3) NOT NULL,
fecha_nacimiento DATE NOT NULL,
ultimo_acceso DATE NOT NULL
);
-- 2. Insertar los datos de prueba
INSERT INTO usuarios (id, nombre, apellido, email, saldo, fecha_nacimiento, ultimo_acceso) VALUES
(1, 'Ana', 'Pérez', 'ana.perez@email.com', 145.678, '1995-04-12', '2026-10-10'),
(2, 'Carlos', 'Gómez', 'carlos.gomez@empresa.org', 250.452, '1988-11-23', '2026-10-14'),
(3, 'Lucía', 'Martínez', 'lucia.m@sitio.net', 89.990, '2001-07-05', '2026-10-19'),
(4, 'Marcos', 'Navarro', 'marcos.navarro@correo.es', 310.125, '1992-02-18', '2026-10-04'),
(5, 'Elena', 'Torres', 'elena.torres@dominio.com', 50.800, '1999-09-30', '2026-10-21');Tabla de datos de referencia (usuarios)
Esta es la información almacenada con la que trabajarás en todos los ejercicios a continuación:
| id | nombre | apellido | saldo | fecha_nacimiento | ultimo_acceso | |
|---|---|---|---|---|---|---|
| 1 | Ana | Pérez | ana.perez@email.com | 145.678 | 1995-04-12 | 2026-10-10 |
| 2 | Carlos | Gómez | carlos.gomez@empresa.org | 250.452 | 1988-11-23 | 2026-10-14 |
| 3 | Lucía | Martínez | lucia.m@sitio.net | 89.990 | 2001-07-05 | 2026-10-19 |
| 4 | Marcos | Navarro | marcos.navarro@correo.es | 310.125 | 1992-02-18 | 2026-10-04 |
| 5 | Elena | Torres | elena.torres@dominio.com | 50.800 | 1999-09-30 | 2026-10-21 |
Ejercicio 1: Convertir texto a mayúsculas
Muestra el nombre de todos los usuarios completamente en mayúsculas para generar un reporte estandarizado.
Pista
Utiliza UPPER() envolviendo el nombre de la columna en SELECT.
SELECT UPPER(nombre) AS nombre_mayuscula FROM usuarios;
terminal Resultado esperado:
+------------------+ | nombre_mayuscula | +------------------+ | ANA | | CARLOS | | LUCÍA | | MARCOS | | ELENA | +------------------+ 5 rows in set (0.00 sec)
Ejercicio 2: Unir nombre y apellido
Crea una columna calculada nombre_completo que una nombre y apellido con un espacio.
Pista
Usa CONCAT() con la columna nombre, una cadena con espacio y la columna apellido.
SELECT CONCAT(nombre, ' ', apellido) AS nombre_completo
FROM usuarios;
terminal Resultado esperado:
+-----------------+ | nombre_completo | +-----------------+ | Ana Pérez | | Carlos Gómez | | Lucía Martínez | | Marcos Navarro | | Elena Torres | +-----------------+ 5 rows in set (0.00 sec)
Ejercicio 3: Contar los caracteres de un texto
Calcula cuántos caracteres tiene exactamente el correo electrónico de cada usuario.
Pista
Utiliza LENGTH() o CHAR_LENGTH(), recomendado para caracteres especiales, sobre email.
SELECT email, CHAR_LENGTH(email) AS longitud_correo FROM usuarios;
terminal Resultado esperado:
+--------------------------+-----------------+ | email | longitud_correo | +--------------------------+-----------------+ | ana.perez@email.com | 19 | | carlos.gomez@empresa.org | 24 | | lucia.m@sitio.net | 17 | | marcos.navarro@correo.es | 24 | | elena.torres@dominio.com | 24 | +--------------------------+-----------------+ 5 rows in set (0.00 sec)
Ejercicio 4: Redondear saldos a un decimal
Muestra el saldo de cada usuario redondeado a un solo decimal.
Pista
Usa ROUND(columna, decimales) indicando el dato y la cantidad de decimales.
SELECT saldo, ROUND(saldo, 1) AS saldo_redondeado FROM usuarios;
terminal Resultado esperado:
+---------+------------------+ | saldo | saldo_redondeado | +---------+------------------+ | 145.678 | 145.7 | | 250.452 | 250.5 | | 89.990 | 90.0 | | 310.125 | 310.1 | | 50.800 | 50.8 | +---------+------------------+ 5 rows in set (0.00 sec)
Ejercicio 5: Eliminar decimales sin redondear
Muestra el saldo entero de cada usuario descartando los decimales sin redondear.
Pista
Usa TRUNCATE(columna, decimales) solicitando 0 decimales.
SELECT saldo, TRUNCATE(saldo, 0) AS saldo_entero FROM usuarios;
terminal Resultado esperado:
+---------+--------------+ | saldo | saldo_entero | +---------+--------------+ | 145.678 | 145 | | 250.452 | 250 | | 89.990 | 89 | | 310.125 | 310 | | 50.800 | 50 | +---------+--------------+ 5 rows in set (0.00 sec)
Ejercicio 6: Obtener la fecha del sistema
Devuelve únicamente la fecha actual del servidor de base de datos sin consultar una tabla.
Pista
Utiliza CURDATE() o CURRENT_DATE en un SELECT sin FROM.
SELECT CURDATE() AS fecha_hoy;
terminal Resultado esperado:
+------------+ | fecha_hoy | +------------+ | 2026-10-24 | +------------+ 1 row in set (0.00 sec)
Ejercicio 7: Extraer un fragmento de una fecha
Muestra el nombre y únicamente el año de nacimiento de cada usuario.
Pista
YEAR(columna) recibe una fecha completa y extrae su año.
SELECT nombre, YEAR(fecha_nacimiento) AS anio_nacimiento FROM usuarios;
terminal Resultado esperado:
+--------+-----------------+ | nombre | anio_nacimiento | +--------+-----------------+ | Ana | 1995 | | Carlos | 1988 | | Lucía | 2001 | | Marcos | 1992 | | Elena | 1999 | +--------+-----------------+ 5 rows in set (0.00 sec)
Ejercicio 8: Calcular días transcurridos
Calcula cuántos días han pasado desde el ultimo_acceso de cada usuario hasta hoy.
Pista
Usa DATEDIFF(fecha_más_reciente, fecha_más_antigua) junto con CURDATE().
SELECT nombre, DATEDIFF(CURDATE(), ultimo_acceso) AS dias_inactividad FROM usuarios;
terminal Resultado esperado:
+--------+------------------+ | nombre | dias_inactividad | +--------+------------------+ | Ana | 14 | | Carlos | 10 | | Lucía | 5 | | Marcos | 20 | | Elena | 3 | +--------+------------------+ 5 rows in set (0.00 sec)
Ejercicio 9: Calcular una fecha de vencimiento futura
Calcula la fecha de vencimiento de cada cuenta, 30 días después del último acceso.
Pista
Emplea DATE_ADD(columna, INTERVAL valor tipo) con un intervalo DAY.
SELECT nombre, ultimo_acceso, DATE_ADD(ultimo_acceso, INTERVAL 30 DAY) AS fecha_vencimiento FROM usuarios;
terminal Resultado esperado:
+--------+---------------+-------------------+ | nombre | ultimo_acceso | fecha_vencimiento | +--------+---------------+-------------------+ | Ana | 2026-10-10 | 2026-11-09 | | Carlos | 2026-10-14 | 2026-11-13 | | Lucía | 2026-10-19 | 2026-11-18 | | Marcos | 2026-10-04 | 2026-11-03 | | Elena | 2026-10-21 | 2026-11-20 | +--------+---------------+-------------------+ 5 rows in set (0.00 sec)
Ejercicio 10: Generar un código anidando funciones
Crea un código de usuario combinando las 3 primeras letras del apellido en mayúsculas con el año de nacimiento.
Pista
Anida LEFT(), UPPER(), YEAR() y CONCAT() para construir el código.
SELECT CONCAT(UPPER(LEFT(apellido, 3)), YEAR(fecha_nacimiento)) AS codigo_usuario FROM usuarios;
terminal Resultado esperado:
+----------------+ | codigo_usuario | +----------------+ | PÉR1995 | | GÓM1988 | | MAR2001 | | NAV1992 | | TOR1999 | +----------------+ 5 rows in set (0.00 sec)
Preguntas frecuentes
¿Puedo usar funciones dentro de la cláusula WHERE?
Sí. Por ejemplo, puedes utilizar WHERE YEAR(fecha_nacimiento) = 1990 para filtrar a los usuarios nacidos en ese año.
¿La función DATEDIFF funciona para meses o años?
No directamente. DATEDIFF devuelve exclusivamente la diferencia en días. Para meses, horas o años utiliza TIMESTAMPDIFF.
¿Se pueden anidar múltiples funciones al mismo tiempo?
Totalmente. Puedes colocar una función dentro de otra; MySQL evalúa primero la función más interna y aplica la externa al resultado.
Conclusión
¡Enhorabuena! Completar estos 10 ejercicios te ha dado herramientas para moldear información directamente desde tus consultas. Dominar las funciones de texto, números y fechas en MySQL te ahorra trabajo de programación en tu aplicación y permite que la base de datos se encargue eficientemente del formato. Sigue experimentando y anidando distintas herramientas para crear reportes más limpios, rápidos y profesionales.
Sigue aprendiendo
Guía oficial con las funciones de texto disponibles en MySQL.
Documentación completa sobre operaciones de fecha y tiempo.
Referencia oficial sobre redondeo y cálculos numéricos.
Sigue practicando
Otros ejercicios prácticos recomendados
10 Ejercicios resueltos de Filtrado y Ordenamiento de Resultados en MySQL
Domina la extracción de datos con estos 10 ejercicios resueltos de filtrado y ordenamiento en MySQL. Aprende paso a paso a utilizar las cláusulas WHERE y ORDER BY para organizar tu información y encontrar exactamente lo...
10 Ejercicios de Consultas con SELECT en MySQL
Aprende a extraer información de bases de datos con estos 10 ejercicios resueltos de consultas con SELECT en MySQL. Domina desde la lectura básica hasta el uso de filtros y ordenamiento, paso a paso y con ejemplos prácti...
10 Ejercicios de Inserción y Actualización de Datos en MySQL
Aprende a manipular información en bases de datos con estos 10 ejercicios resueltos de inserción y actualización de datos en MySQL. Domina los comandos fundamentales a través de ejemplos prácticos, con el esquema de la t...