Una de las consultas mas frecuentes que solemos realizar es la de devolver datos entre fechas. La manera mas sencilla de realizar es utilizar el operador de comparación ‘BETWEEN’. Por ejemplo si queremos ver los datos entre dos fechas lo haremos de la siguiente manera. En este ejemplo la fecha mas baja es ‘fechaMin’ y la alta ‘fechaMax’, y hay que tener en cuenta que todos los argumentos tienen que ser del mismo tipo.
SELECT * FROM `miTabla` WHERE `miCampoFecha` BETWEEN 'fechaMin' AND 'fechaMax';
Si el valor de `micampoFecha` es mayor o igual que ‘fechaMin’ y menor o igual que ‘fechaMax’ ‘BETWEEN’ devolvera 1 si no devolvera 0. Esto es lo mismo que hacer lo siguiente.
SELECT * FROM `miTabla` WHERE ('fechaMin' <= `miCampoFecha` AND `miCampoFecha` <= 'fechaMax')
Si lo que queremos es mostrar las fechas que no esten comprendidas dentro de este rango añadiremos ‘NOT’ delante de ‘BETWEEN’
SELECT * FROM `miTabla` WHERE `miCampoFecha` NOT BETWEEN 'fechaMin' AND 'fechaMax';
Para mas información acerca de los operadores de comparación en MySQL hacer clic aquí
¿Y qué pasa si queremos que las fechas sean, hoy y el mes siguiente?
Es decir, buscar los datos de acontecimientos que ocurrirán en los próximos 30 días.
PD: gracias por la explicación del uso de estas funciones, me he aclardado mucho.
En ese caso no usas BETWEEN sino que usas la función DATE_SUB para restar días o semanas o meses o años a una fecha y DATE_ADD para sumar días o semanas o meses, así que si digo que WHERE DATE(miCampoFechaOfechaHora) >= DATE_ADD(miCampoFechaOfechaHora, INTERVAL 1 month)
hola gracias por el post, mi duda si tienes 2 campos fecha en la tabla, uno llamado fechaini y el otro fechafin, como harías para hacer una consulta que te devuelva un valor que si esta entre esos campos te devuelva el registro relacionado.
Hola David, tendrías que hacer 2 between y unirlos con un and el primero con la fechaini y el segundo con la fechafin
Buenas tardes, como se haría si quisiera hacer algo como esto en un stored procedure:
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc`(
in pfecha date,
in pfecha2 date
)
BEGIN
select
fecha,
descripcion,
pagado
from
fac_enc fe
join cliente c
using(id_cliente)
where
if(pfecha»,fecha between pfecha and pfecha2,true);
END
Es decir, si quisiera que cuando edite las fechas haga la consulta entre las fechas de inicio y fin, pero si no la consulto que la fecha no sea un impedimento y me muestre todos los registros.