PERBARUI
Cara ramah indeks yang jauh lebih baik untuk menanyakan data Anda untuk rentang tanggal
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);
Catatan: Anda tidak menerapkan fungsi apa pun ke data kolom Anda, melainkan melakukan semua perhitungan yang diperlukan di sisi kanan kondisi (yang merupakan konstanta dan dievaluasi hanya sekali pasca-eksekusi). Dengan cara ini Anda mengizinkan MySQL untuk memanfaatkan indeks yang mungkin Anda miliki di timestampfield
kolom.
Jawaban asli:
SELECT id, FROM_UNIXTIME(timestampfield) timestamp
FROM table1
WHERE MONTH(FROM_UNIXTIME(timestampfield)) = MONTH(CURDATE())
AND YEAR(FROM_UNIXTIME(timestampfield)) = YEAR(CURDATE())
Catatan: Meskipun kueri ini menghasilkan hasil yang benar, kueri ini secara efektif membatalkan penggunaan indeks yang tepat yang mungkin Anda miliki di timestampfield
kolom (artinya MySQL akan dipaksa untuk melakukan fullscan)
Ini SQLFiddle demo