AKTUALIZUJ
O wiele lepszy, przyjazny dla indeksów sposób wyszukiwania danych dla zakresu dat
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);
Uwaga: Nie stosujesz żadnej funkcji do danych kolumny, ale raczej wykonujesz wszystkie niezbędne obliczenia po prawej stronie warunków (które są stałymi i są obliczane tylko raz po wykonaniu). W ten sposób pozwalasz MySQL na korzystanie z indeksów, które możesz mieć w timestampfield
kolumna.
Oryginalna odpowiedź:
SELECT id, FROM_UNIXTIME(timestampfield) timestamp
FROM table1
WHERE MONTH(FROM_UNIXTIME(timestampfield)) = MONTH(CURDATE())
AND YEAR(FROM_UNIXTIME(timestampfield)) = YEAR(CURDATE())
Uwaga: Chociaż to zapytanie daje poprawne wyniki, skutecznie unieważnia prawidłowe użycie indeksów, które możesz mieć w timestampfield
kolumna (co oznacza, że MySQL zostanie zmuszony do wykonania pełnego skanowania)
Oto SQLFiddle demo