Mysql
 sql >> Database >  >> RDS >> Mysql

Seleziona i record dei mesi correnti mysql dalla colonna timestamp

AGGIORNAMENTO

Un modo molto più intuitivo per eseguire query sui dati per un intervallo di date

SELECT id, FROM_UNIXTIME(timestampfield) timestamp 
  FROM table1
 WHERE timestampfield >= UNIX_TIMESTAMP(LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH)
   AND timestampfield <  UNIX_TIMESTAMP(LAST_DAY(CURDATE()) + INTERVAL 1 DAY);

Nota: Non si applica alcuna funzione ai dati della colonna, ma si eseguono tutti i calcoli necessari sul lato destro delle condizioni (che sono costanti e vengono valutate solo una volta dopo l'esecuzione). In questo modo consenti a MySQL di beneficiare degli indici che potresti avere nel timestampfield colonna.

Risposta originale:

SELECT id, FROM_UNIXTIME(timestampfield) timestamp 
  FROM table1
 WHERE MONTH(FROM_UNIXTIME(timestampfield)) = MONTH(CURDATE())
   AND YEAR(FROM_UNIXTIME(timestampfield)) = YEAR(CURDATE())

Nota: Sebbene questa query produca i risultati corretti, invalida di fatto il corretto utilizzo degli indici che potresti avere nel timestampfield colonna (che significa che MySQL sarà costretto a eseguire una scansione completa)

Ecco SQLFiddle demo