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.