Pregunta

Quiero seleccionar registros entre dos fechas: una fecha de inicio y una data final (son formatos 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'"
¿Fue útil?

Solución

Sugeriría convertir las fechas a una fecha y hora 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: Asumí que su fecha de inicio y la fecha final eran del mismo formato que las cadenas que su provisión.

Otros consejos

¿Quieres todas las filas que startDate es '2012-02-22' o más tarde y endDate es '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`

Al usar fechas con productos SQL, use mejor este formato en consultas y declaraciones: '20120222' O esto (que me parece más fácil de leer: '2012-02-22'.

Usando barras como '2012/02/22' o cualquier otro orden que Year-Month-Day no es recomendado.

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

Usando endDate <= '2012-02-25 00:00:00' significa que cualquier fila con fecha 25 de febrero de 2012 pero hora después de la medianoche ('00:00:00') no coincidirá con la condición. Si quieres esas filas también, usa endDate < '2012-02-26' en cambio.

Podrías 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 sus consultas no podrán usar un índice en endDate.

Está el construido STR_TO_DATE función en mysql que toma la misma máscara de formato que formato de fecha.

start_date >= str_to_date('2012/02/22 00:00:00','%Y/%m/%d %h:%i:%s)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top