2012-03-30 25 views
24

Tengo una pregunta rápida. Tengo una tabla de auditoría de DB con una columna de fecha y hora en ella. (es decir, 2012-03-27 00:00:00) y estoy creando una consulta mySQL para devolver un conjunto de filas si la fecha está entre las dos fechas que le doy.mySQL dateTime range Query Issue

hasta ahora mi consulta es la siguiente:

SELECT * FROM util_audit WHERE DATED >= DATE(03/15/2012) AND DATED <= DATE(03/31/2012); 

si sólo tiene que utilizar

SELECT * FROM util_audit WHERE DATED >= DATE(03/15/2012); 

Se vuelve todo mi registro, ya que tenían una antigüedad de esta semana.

También probé esto:

SELECT * FROM util_audit WHERE DATED >= '02/15/2012 00:00:00' AND DATED <= '03/31/2012 00:00:00'; 

y nada! Devolverá cero filas, cuando sé que todos los he datado del 27 de este mes hasta hoy. ¿Me estoy perdiendo de algo? ¿Por qué funciona por sí mismo, pero no cuando agrego la segunda fecha? Probablemente estoy pasando por alto algo.

Respuesta

44

Probar:

SELECT * FROM util_audit WHERE `DATED` BETWEEN "2012-03-15" AND "2012-03-31"; 
+1

Esto funcionó, ¡gracias por la rápida respuesta! – Myy

+3

¿Qué sucede cuando tienes más criterios de búsqueda (por ej., SELECCIONAR * FROM util_audit WHERE 'FECHADO 'ENTRE" 2012-03-15 "Y" 2012-03-31 "Y booLive = 1)? Porque tengo errores – khany

+1

No puedo reproducir ese error, pero en cualquier caso siempre puede usar paréntesis para mayor claridad, p. 'SELECT * FROM util_audit WHERE (FECHADO ENTRE" 2012-03-15 "Y" 2012-03-31 ") Y booLive = 1;' –

6

Por lo que yo sé, las fechas en MySQL se representan con el formato yyyy-MM-dd hh:mm:ss por lo tanto, lo que necesita hacer esto:

SELECT * FROM util_audit 
WHERE DATED >= '2012-02-15 00:00:00' AND DATED <= '2012-03-31 00:00:00'; 

O aún mejor:

SELECT * FROM util_audit 
WHERE DATED BETWEEN '2012-02-15 00:00:00' AND '2012-03-31 00:00:00'; 
+0

estos métodos también funcionan, ¡gracias! – Myy

9

Hay algunos casos de borde que deben capturarse aquí mediante el uso de la fecha de finalización correcta, si No se tienen en cuenta los elementos de la 31:

SELECT * FROM util_audit 
WHERE DATED >= '2012-02-15 00:00:00' AND DATED <= '2012-03-31 23:59:59'; 

SELECT * FROM util_audit 
WHERE DATED BETWEEN '2012-02-15 00:00:00' AND '2012-03-31 23:59:59'; 

O usted podría empujar hacia adelante la fecha de finalización y uso:

SELECT * FROM util_audit 
WHERE DATED >= '2012-02-15 00:00:00' AND DATED < '2012-04-01'; 

SELECT * FROM util_audit 
WHERE DATED BETWEEN '2012-02-15 00:00:00' AND '2012-04-01'; 

encontré con esto mismo por lo que creo que sirve si otras personas encuentran esta página.

+1

Accidentalmente voté esta pregunta. ¡Este es el formato de fecha que utilicé! Lo mismo hizo una edición, invirtió mi voto y eliminó la edición. Lo siento por eso. – Quaternion