Funciones de Fecha
MySQL ofrece una variedad de funciones para trabajar con fechas y horas. A continuación, se muestran ejemplos de cómo extraer componentes de fechas, realizar manipulaciones temporales y calcular diferencias.
Extracción de Componentes de Fecha y Hora
Para obtener el año, mes y día:
SELECT YEAR(NOW()), MONTH(NOW()), DAY(NOW());
Para obtener la hora, minuto y segundo:
SELECT HOUR(NOW()), MINUTE(NOW()), SECOND(NOW());
Para obtener una marca de tiempo completa:
SELECT NOW();
Manipulación de Fechas
Sumar un intervalo a una fecha:
SELECT DATE_ADD(fecha_existente, INTERVAL 5 DAY);
Restar un intervalo de tiempo de una fecha:
SELECT DATE_SUB(fecha_existente, INTERVAL 3 HOUR);
Calcular la diferencia en días entre dos fechas:
SELECT DATEDIFF(fecha_fin, fecha_inicio);
Ejemplo Práctico con Fechas
Consideremos una tabla de mensajes:
CREATE TABLE mensajes (
id INT PRIMARY KEY AUTO_INCREMENT,
texto VARCHAR(255) NOT NULL,
fecha_envio DATETIME
);
Insertando datos de ejemplo:
INSERT INTO mensajes(texto, fecha_envio) VALUES('Primer mensaje', NOW());
INSERT INTO mensajes(texto, fecha_envio) VALUES('Segundo mensaje', NOW());
Para mostrar todos los mensajes, limitando la fecha solo a la parte del día:
SELECT id, texto, DATE(fecha_envio) AS fecha_publicacion FROM mensajes;
Para consultar mensajes publicados en los últimos 2 minutos:
SELECT * FROM mensajes WHERE DATE_ADD(fecha_envio, INTERVAL 2 MINUTE) > NOW();
Funciones de Cadena
Las funciones de cadena son esenciales para manipular y formatear texto en consultas SQL.
Ejemplos con Cadenas
Obtener el conjunto de caracteres de una columna de nombre:
SELECT CHARSET(nombre) FROM empleados;
Formatear la visualización de resultados de exámenes. Suponiendo una tabla resultados\_examenes con columnas nombre, ingles, matematicas:
SELECT CONCAT(nombre, ' obtuvo ', ingles, ' en Inglés y ', matematicas, ' en Matemáticas.') AS ResumenExamen
FROM resultados_examenes;
Calcular el número de bytes que ocupa un nombre en la tabla resultados\_examenes. La función LENGTH devuelve la longitud en bytes.
SELECT LENGTH(nombre), nombre FROM resultados_examenes;
Reemplazar una subcadena dentro de otra. Para reemplazar todas las 'S' por 'Shanghai' en la columna nombre de la tabla empleados:
SELECT REPLACE(nombre, 'S', 'Shanghai') AS nombre_modificado, nombre FROM empleados;
Extraer una subcadena. Para obtener los caracteres del segundo al tercer carácter (2 caracteres de longitud) del campo nombre en la tabla empleados:
SELECT SUBSTRING(nombre, 2, 2) AS subcadena, nombre FROM empleados;
Convertir el primer carácter a minúscula y el resto a su estado original para los nombres de empleados:
SELECT CONCAT(LCASE(SUBSTRING(nombre, 1, 1)), SUBSTRING(nombre, 2)) AS nombre_formateado FROM empleados;
Funciones Matemáticas
MySQL proporciona funciones matemáticas para realizar cálculos numéricos.
Operaciones Matemáticas Comunes
Calcular el valor absoluto:
SELECT ABS(-150.75);
Redondear al entero superior (techo):
SELECT CEILING(35.12);
Redondear al entero inferior (suelo):
SELECT FLOOR(35.98);
Formatear un número con dos decimales, aplicando redondeo (cuatro operaciones decimales):
SELECT FORMAT(7.89123, 2);
Generar un número aletaorio entre 0 y 1:
SELECT RAND();
Otras Funciones Útiles
Existen diversas funciones adicionales que facilitan tareas comunes en MySQL.
Funciones Variadas
Obtener el usuario y host actual de la conexión:
SELECT USER();
Generar un hash MD5 para una cadena:
SELECT MD5('contraseña_secreta');
Mostrar el nombre de la base de datos actualmente en uso:
SELECT DATABASE();
Manejar valores NULL. Si el primer argumento es NULL, devuelve el segundo; de lo contrario, devuelve el primero.
SELECT IFNULL('valor_existente', 'valor_por_defecto');
SELECT IFNULL(NULL, 'valor_por_defecto');