varios valores rango por operador operaciones mismo filtrar fechas entre ejemplo consulta condicion con campo sql mysqli isqlquery

valores - operaciones con fechas sql



Selección de consultas SQL entre dos fechas (3)

Quiero seleccionar registros entre dos fechas: a startDate y endDate (son formato de fecha / hora en sql). Tengo la siguiente consulta sql pero no funciona, ¿alguien podría decirme qué estoy haciendo mal?

"SELECT * FROM house WHERE startDate >= ''2012/02/22 00:00:00'' AND endDate <= ''2012-02-25 00:00:00''"


¿Desea que todas las filas que startDate sean ''2012-02-22'' o posteriores y endDate sea ''2012-02-22'' o anterior? Entonces, usa esto:

SELECT * FROM house WHERE startDate >= ''2012-02-22'' AND endDate < ''2012-02-26'' --- notice the `<`, not `<=` --- and the `day+1`

Cuando utilice fechas con productos SQL, mejor utilice este formato en consultas y declaraciones: ''20120222'' o esto (que me resulta más fácil de leer: ''2012-02-22'' .

No se recomienda el uso de barras como ''2012/02/22'' o cualquier otro orden que no sea Year-Month-Day .

No es necesario incluir la parte de tiempo. ''2012-02-22 00:00:00'' es lo mismo que ''2012-02-22'' .

El uso de endDate <= ''2012-02-25 00:00:00'' significa que cualquier fila con fecha 25 de febrero de 2012 pero hora posterior a la medianoche ( ''00:00:00'' ) no coincidirá con la condición. Si también quiere esas filas, use endDate < ''2012-02-26'' lugar.

Puede usar DATE(endDate) <= DATE(''2012-02-25 00:00:00'') o DATE(endDate) <= ''2012-02-25'' pero estas condiciones son "no sargables", por lo que su las consultas no podrán usar un índice en endDate .


Existe la función STR_TO_DATE en MySql que toma la misma máscara de formato que date_format .

start_date >= str_to_date(''2012/02/22 00:00:00'',''%Y/%m/%d %h:%i:%s)


Sugiero convertir las fechas a una fecha y compararlas, así como mantener la fecha estándar y consistente. Algo como:

"SELECT * FROM house WHERE DATE(startDate) >= DATE(''2012-02-22 00:00:00'') AND DATE(endDate) <= DATE(''2012-02-25 00:00:00'')"

NOTA: Supuse que su fecha de inicio y fecha de finalización eran del mismo formato que las cadenas proporcionadas.