2012-09-06 11 views
7

hasta hoy cuando estaba trabajando con MySQL y necesitaba realizar acciones con fecha/hora Estaba usando la columna int con timestamp unix y no había problemas, pero hoy después de leer algunas guías, decidí columna timestamp de prueba con "current_timestamp" de forma predeterminada.MySQL Seleccione los datos del mes pasado por current_timestamp

Así que estoy interesado en cómo seleccionar los datos del mes pasado por columna donde la información está en formato "2012-09-07 00:23:30"? Y tal vez haya algunas preguntas complicadas que me darán datos desde el comienzo de este mes (¿no duran 30 días, sino desde el 09-01 00:00:00 hasta el día de hoy?

+0

Me enfrenté a un problema similar no hace mucho tiempo y terminé calculando las fechas a través del lenguaje del lado del servidor (en este caso, php pero cualquiera le permitirá hacer esto). De todos modos, también estoy interesado en esto :) – jribeiro

+0

@jribeiro Publicó una respuesta, eche un vistazo. – Ariel

Respuesta

17

Esto le dará el último mes:

WHERE dateColumn BETWEEN SUBDATE(CURDATE(), INTERVAL 1 MONTH) AND NOW(); 

esto desde el principio del mes:

WHERE dateColumn BETWEEN STR_TO_DATE('2012-09-01', '%Y-%m-%d') AND NOW(); 

El ENTRE es nada especial, es sólo un acceso directo para

dateColumn <= ... AND dateColumn >= .... 

Hmm, supongo que la comparación NOW() en realidad no es necesaria, ya que todos los registros serán anteriores.

Así que sólo lo hacen:

WHERE dateColumn >= STR_TO_DATE('2012-09-01', '%Y-%m-%d') 

dinámico inicio del mes en curso:

WHERE dateColumn >= CURDATE() - INTERVAL DAY(CURDATE())-1 DAY 

Todo esto hace es extraer el día del mes de la fecha actual, luego restar que muchos días menos uno de eso.

+0

El problema que veo con esto es si la consulta debe ser dinámica. Lo hago pero aún tengo que encontrar el comienzo del mes en el lado del servidor. Pero tal vez esto va más allá de lo que solicitó el OP. :) – jribeiro

+0

@jribeiro La dinámica no es un problema - Actualicé la respuesta. – Ariel

3

Usted debe echar un vistazo a common_schema, es fácil de instalar y tiene un montón de grandes herramientas, incluyendo una función llamada start_of_month() que es exactamente lo que busca:

select * 
from your_table 
where your_column >= common_schema.start_of_month(now()) 
-1

Si usted tiene una marca de tiempo MySQL , algo así como 2013-09-29 22:27:10 puede hacer esto

select * from table WHERE MONTH(FROM_UNIXTIME(UNIX_TIMESTAMP(time)))=9; 

Convertir a UNIX, a continuación, utilizar las funciones de tiempo UNIX para extraer el mes, en este caso el 9 de septiembre.

+1

mejor aún 'seleccionar * de la tabla donde MES (tiempo) = (MES (AHORA()));' – Federico

+0

¿Qué tal este mes el próximo año? – Mala

+0

quizás seleccione * de la tabla donde MES (tiempo) = (MES (AHORA())) y AÑO (tiempo) = AÑO (AHORA()); – Stenyg

Cuestiones relacionadas