Portada » Lenguaje PHP » Buscar por fechas en MySQL: Operador AND y BETWEEN

Buscar por fechas en MySQL: Operador AND y BETWEEN

Buscar por fechas en MySQL. En ocasiones tenemos que llegar a este tema de la búsqueda por rango de fechas en MySQL y en este artículo daremos 2 ejemplos completos para buscar fechas de una manera óptima.

Buscar por fechas en MySQL: Operador AND y BETWEEN
Buscar por fechas en MySQL: Operador AND y BETWEEN

Hay que analizar que la columna se de tipo date y deberías usar un "=" junto con el dato a comparar:

SELECT * FROM [tabla]
WHERE [columna (date)] = [atributo (date)]

O un BETWEEN si es en un rango de fechas:

SELECT * FROM tablename 
WHERE columname BETWEEN '2021-09-25' AND '2021-10-25'

Con esto ya tenemos una idea para preparar nuestra consulta SQL, ya sea por una fecha o rango de fechas.

Buscar por fechas en MySQL

A continuación, mostraremos las dos formas para buscar por rangos de fechas.

a) Buscar usando operador AND de MySQL

La condición AND de MySQL (también llamada operador AND) se usa para probar dos o más condiciones en una instrucción SELECT, INSERT, UPDATE o DELETE.

Formulario HTML5

Nos permitirá la interfaz gráfica para recoger las fechas y posteriormente buscar en MySQL

<form action="" method="post">
<div class="col-md-3"> 
<label for="inputMarca">Fecha 01:</label>
<input type="date" class="form-control" name="fecha1" value="<?php echo isset($_POST['fecha1'])?$_POST['fecha1']:''; ?>" required>
</div>
<div class="col-md-3">
<label for="inputMarca">Fecha 02:</label>
<input type="date" class="form-control" name="fecha2" value="<?php echo isset($_POST['fecha2'])?$_POST['fecha2']:''; ?>" required>
</div>
<div class="col-md-3">
<div class="form-group">

<label>&nbsp;</label>
<div>
<button type="submit" name="submit" value="search" id="submit" class="btn btn-primary"><i class="fa fa-fw fa-search"></i> Buscar</button>
</div>
</div>

</div>
</form>

Condicional IF ELSE

Usaremos condicionales para optimizar la consulta SQL en el hipotético caso que el usuario no rellene el formulario o mostrar resultados por defecto en un determinado rango de fechas.

Caso contrario, mostrara los valores enviado por el formulario que desencadenara la búsqueda en MySQL. Por lo tanto, recuperamos los valores del formulario usando PHP.

if($_POST["fecha1"]!=""){
$fecha1 = htmlentities($_POST["fecha1"]);
}else{
$fecha1 = date("Y-m-d",strtotime(date("Y-m-d")."- 1 month")); 
}
//fecha 02
if($_POST["fecha2"]!=""){
$fecha2 = htmlentities($_POST["fecha2"]);
}else{
$fecha2 = date("Y-m-d"); 
}

Proceso de la información SQL

Procesamos los valores del formulario haciendo uso de una consulta SQL mediante PDO que es el más recomendado por seguridad y optimización.

$stmt = $connect->prepare("
SELECT SUM(monto) 
from ingresos
WHERE fecha >= :startDate AND fecha<= :endDate");

$stmt->bindParam(':startDate',$fecha1);
$stmt->bindParam(':endDate',$fecha2);
$stmt->execute();
$totali = $stmt->fetch(PDO::FETCH_NUM);
$total_ingreso = $totali[0];

Imprimirá la suma de registros obtenidos en la consulta, en el ejemplo deseamos obtener el valor total de los ingresos a través de un rango de fechas.

b) Buscar usando operador BETWEEN

Si se trata de fechas, el más recomendado es el operador BETWEEN. Recordemos que este operador trabaja dentro de la cláusula WHERE en una consulta SQL para seleccionar valores entre un rango de datos.

$stmt = $connect->prepare("SELECT SUM(monto) from ingresos 
WHERE fecha BETWEEN :startDate AND :endDate");

$stmt->bindParam(':startDate',$fecha1);
$stmt->bindParam(':endDate',$fecha2);
$stmt->execute();
$totali = $stmt->fetch(PDO::FETCH_NUM);
$total_ingreso = $totali[0];

c) Buscar y visualizar registros MySQL con FOREACH

El anterior ejemplo da como resultado la sumatoria de registros para obtener el monto total de una columna si se trata de mostrar dinero.

Aquí, les dejare un ejemplo si desean mostrar los registros en una lista y si desean pueden incorporar una tabla haciendo uso de ciclo foreach del PHP.

//Uso de consultas preparadas para evitar la Inyección SQL.
$sql = "SELECT * FROM persona WHERE fecha_nacimiento BETWEEN :inicio AND :fin;";

$stmt = $pdo->prepare($sql);
$stmt->bindValue(":inicio",$fecha1);
$stmt->bindValue(":fin",$fecha2);


$stmt ->execute();
$arrDatos = $stmt->fetchAll(PDO::FETCH_ASSOC);

if ($arrDatos)
{
echo "<pre>";
echo "CONSULTA 1: SE ENCONTRARON ".count($arrDatos). " REGISTROS\n";
print_r($arrDatos);

$strLista="\n\nLISTA DE DATOS CONSULTA 1:\n";
foreach ($arrDatos as $row)
{
echo "Id: ".$row["persona_id"];
echo "Nombre: ".$row["persona_nom"];
echo "Fecha: ".$row["fecha_nacimiento"];

}

echo "</pre>";

}
else
{
echo "No hay datos";
}

Conclusión

Si tienen problemas con filtrar fechas en MySQL aquí hemos aprendido dos formas para lograr el objetivo deseado. Sin embargo, el método más recomendado es usar el operador BETWEEN.

Si están trabajando con consultas SQL, lo recomendado es usar la conexión PDO y también en la programación. Por lo tanto, recordemos que PDO tiene que estar configurado para la seguridad.

Otro detalle, debemos de hacer uso de PDO en las consultas preparadas para evitar la Inyección SQL.

Espero que esta explicación sea de su agrado y les ayude en sus proyectos web.

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuarlo!

Promedio de puntuación 4 / 5. Recuento de votos: 1

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Scroll al inicio
Esta web utiliza cookies propias para su correcto funcionamiento. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Privacidad