Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chọn các bản ghi tháng hiện tại mysql từ cột dấu thời gian

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách bật bộ đệm truy vấn MySQL

  2. Các truy vấn MySQL lặp lại từ Python trả về cùng một dữ liệu

  3. MYSQL - ký tự Thổ Nhĩ Kỳ

  4. Mysql có thể tách một cột không?

  5. Cách xác định chỉ mục duy nhất trên nhiều cột trong phần tiếp theo