Saltar al contenido
CodigoDev

10 Ejercicios resueltos de Funciones de Texto, Números y Fechas en MySQL

MySQL Básico
Ejercicios resueltos de Funciones de Texto, Números y Fechas en MySQL
lightbulb Introducción al ejercicio

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.

menu_book

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:

idnombreapellidoemailsaldofecha_nacimientoultimo_acceso
1AnaPérezana.perez@email.com145.6781995-04-122026-10-10
2CarlosGómezcarlos.gomez@empresa.org250.4521988-11-232026-10-14
3LucíaMartínezlucia.m@sitio.net89.9902001-07-052026-10-19
4MarcosNavarromarcos.navarro@correo.es310.1251992-02-182026-10-04
5ElenaTorreselena.torres@dominio.com50.8001999-09-302026-10-21

Ejercicio 1: Convertir texto a mayúsculas

help_outline Problema:

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.

code Solución explicada:
sql
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

help_outline Problema:

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.

code Solución explicada:
sql
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

help_outline Problema:

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.

code Solución explicada:
sql
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

help_outline Problema:

Muestra el saldo de cada usuario redondeado a un solo decimal.

Pista

Usa ROUND(columna, decimales) indicando el dato y la cantidad de decimales.

code Solución explicada:
sql
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

help_outline Problema:

Muestra el saldo entero de cada usuario descartando los decimales sin redondear.

Pista

Usa TRUNCATE(columna, decimales) solicitando 0 decimales.

code Solución explicada:
sql
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

help_outline Problema:

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.

code Solución explicada:
sql
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

help_outline Problema:

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.

code Solución explicada:
sql
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

help_outline Problema:

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().

code Solución explicada:
sql
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

help_outline Problema:

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.

code Solución explicada:
sql
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

help_outline Problema:

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.

code Solución explicada:
sql
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)
help

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.

task_alt

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.

rocket_launch

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.

A
Autor del artículo

Alejandro Nes

calendar_today update Actualizado

Desarrollador de Software y creador de contenido educativo

Otros ejercicios prácticos recomendados

Ver todos arrow_forward