CẬP NHẬT
Một cách thân thiện với chỉ mục tốt hơn nhiều để truy vấn dữ liệu của bạn trong một phạm vi ngày
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);
Lưu ý: Bạn không áp dụng bất kỳ hàm nào cho dữ liệu cột của mình, mà thực hiện tất cả các phép tính cần thiết ở phía bên phải của các điều kiện (là hằng số và chỉ được đánh giá một lần sau khi thực thi). Bằng cách này, bạn cho phép MySQL hưởng lợi từ (các) chỉ mục mà bạn có thể có trên timestampfield
cột.
Câu trả lời ban đầu:
SELECT id, FROM_UNIXTIME(timestampfield) timestamp
FROM table1
WHERE MONTH(FROM_UNIXTIME(timestampfield)) = MONTH(CURDATE())
AND YEAR(FROM_UNIXTIME(timestampfield)) = YEAR(CURDATE())
Lưu ý: Mặc dù truy vấn này tạo ra kết quả chính xác nhưng nó làm mất hiệu lực một cách hiệu quả việc sử dụng (các) chỉ mục mà bạn có thể có trên timestampfield
cột (nghĩa là MySQL sẽ bị buộc phải thực hiện quét toàn bộ)
Đây là SQLFiddle bản demo