2011-07-25 25 views
6

He estado grabando datos de Twitter para un proyecto en el que estoy trabajando en la fecha en que la información se guarda como Thu, 14 Jul 2011 06:21:48 +0000 en un campo de cadena.Obteniendo datos entre dos cadenas de fechas en MySQL

¿Cómo selecciono los datos que se encuentran entre dos fechas usando mySQL? Puedo obtener datos de un valor mayor que un valor o menor que un valor, pero no entre valores.

Los datos de ejemplo es:

Thu, 14 Jul 2011 06:21:48 +0000 
Thu, 14 Jul 2011 12:18:21 +0000 
Thu, 14 Jul 2011 18:48:00 +0000 
Thu, 14 Jul 2011 23:48:02 +0000 
Fri, 15 Jul 2011 06:48:10 +0000 
Fri, 15 Jul 2011 12:48:00 +0000 
Fri, 15 Jul 2011 18:43:32 +0000 
Fri, 15 Jul 2011 23:44:08 +0000 
Sat, 16 Jul 2011 06:47:08 +0000 
Sat, 16 Jul 2011 12:46:49 +0000 
Sat, 16 Jul 2011 18:45:41 +0000 
Sat, 16 Jul 2011 23:41:27 +0000 

Mi cadena SQL es:

SELECT * 
FROM twitter 
WHERE SUBSTR(twitter_date, 6, 11) >= '2011-06-15' 
AND SUBSTR(twitter_date, 6, 11) <= '2011-06-21' 

He intentado BETWEEN declaraciones también, pero sin suerte.

¡Cualquier ayuda será apreciada!

+0

posible duplicado de [Obtener datos entre dos fechas en MySQL] (http://stackoverflow.com/questions/2716336/get-data-between-two-date-on-mysql) – genesis

+0

Considere el uso de la palabra clave 'BETWEEN' . –

+0

@genesis, eso no es un duplicado, mire más de cerca –

Respuesta

7

No se puede utilizar entre porque son cadenas y no campos de fecha reales. Si conoce el formato de la fecha siempre será el mismo, puede hacer lo siguiente: STR_TO_DATE(str,format)

SELECT * 
FROM twitter 
WHERE STR_TO_DATE(twitter_date, '%a, %c %b %Y %k:%i:%s') 
     between '2011-06-15' AND '2011-06-21' 
+0

¡Gracias! ¡Funciona! – andrebruton

0

Es posible que desee examinar la función MySQLs STR_TO_DATE. Esto le dará una fecha y entre debe funcionar como se esperaba.

+0

Probado pero no funcionó – andrebruton

0

La consulta fallará. Está comparando dos STRINGS, no fechas. Necesita decirle a MySQL explícitamente que desea tratar las cadenas como fechas. Ya que es información de la fecha, almacenarlo en una fecha o de fecha y hora tipo de campo en MySQL, lo cual le ahorra todo este problema:

SELECT STR_TO_DATE(SUBSTR(twitter_date, 6, 11)) >= '2011-06-15' ... 

obligando a su mano del lado izquierdo para ser un valor de fecha adecuada le alusión a MySQL que debe tratar el lado derecho como una fecha también.

2

Usted está comparando "6 Jul 2011" con 2011-06-15.

Debe ser

SELECT * 
FROM twitter 
WHERE SUBSTR(twitter_date, 6, 11) >= '6 Jul 2011' 
AND SUBSTR(twitter_date, 6, 11) <= '21 Jul 2011' 
0


Una vez que haya alterado la tabla para guardar los datos de la fecha en los campos DATETIME adecuadas, es posible que desee hacer referencia a mi respuesta a la siguiente pregunta sobre las fechas y la filtración de ellos, que puede ser útil.

Por ejemplo, en su consulta/datos de arriba, ¿qué pasaría si no tuviera datos para una de las fechas que estaba consultando? No obtendrás ningún resultado para esa fecha, lo que puede parecer extraño cuando graficas, etc. Si utilizas la técnica que describo en la pregunta adjunta, puedes obtener esa información adicional y otras cosas útiles como el día de la semana, el mes. nombre, etc.

Select all months within given date span, including the ones with 0 values

Espero que ayude!

Cuestiones relacionadas