2012-04-17 43 views
5

Tôi đang tìm một truy vấn có thể xóa tất cả các hàng từ bảng trong cơ sở dữ liệu trong đó dấu thời gian cũ hơn ngày/giờ hiện tại hoặc dấu thời gian hiện tại.MySQL Truy vấn để xóa các hàng có dấu thời gian cũ hơn dấu thời gian hiện tại

Sẽ thực sự đánh giá cao một số trợ giúp ở đây khẩn trương!

Dưới đây là các truy vấn Tôi đang sử dụng nhưng như tôi nghĩ rằng nó không được làm việc:

delete from events where timestamp<CURRENT_TIMESTAMP{); 

Trả lời

8
delete from events where timestamp < NOW() 

nên là đủ.

+0

Cảm ơn bạn đã trả lời nhanh chóng nhưng không hoạt động ! Việc xóa tất cả các bản ghi mặc dù dấu thời gian không lớn hơn thời gian/ngày hiện tại – Arihant

+0

bởi "cũ hơn" bạn có nghĩa là dấu thời gian là> thời gian hiện tại? sau đó bạn phải biến báo cáo thành dấu thời gian> NGAY BÂY GIỜ() –

1
DELETE FROM events WHERE timestamp < UNIX_TIMESTAMP(NOW()) 

hoặc nếu đó là một datetime chuẩn

DELETE FROM events WHERE timestamp < NOW() 
+0

Cảm ơn bạn đã trả lời nhanh nhưng điều đó không hoạt động! Xóa tất cả các bản ghi mặc dù dấu thời gian không lớn hơn thời gian/ngày hiện tại – Arihant

+0

Biến xóa thành dấu thời gian đã chọn. Bạn có thể hiển thị một vài giá trị dấu thời gian không được đặt trong tập kết quả không? Cũng làm một NGAY BÂY GIỜ(). –

21

Um ... Điều này có vẻ ngớ ngẩn, nhưng mỗi bản ghi trong bảng sẽ lớn hơn Now(), vì Now() được tính theo thời gian truy vấn được xử lý. Nếu bạn muốn xóa bản ghi cũ hơn bản ghi khác, thì bạn không muốn sử dụng Hiện hành(), nhưng dấu thời gian từ bản ghi bạn đang so sánh phần còn lại. Hoặc, nếu bạn muốn xóa các bản ghi cũ hơn một thời điểm cụ thể, thì bạn cần tính toán dấu thời gian mà bạn muốn sử dụng để so sánh. Ví dụ, để xóa các bản ghi cũ hơn 10 phút, bạn có thể sử dụng này:

DELETE FROM events WHERE timestamp < (NOW() - INTERVAL 10 MINUTE) 

Hoặc, để xóa hồ sơ mà đã qua một ngày cũ:

DELETE FROM events WHERE timestamp < (NOW() - INTERVAL 1 DAY) 

cho điểm cụ thể trong thời gian (ví dụ tháng mười 12, 2012 at 4:15:00 PM GMT), có một phương pháp để làm điều đó, nhưng cú pháp thoát khỏi tôi, ngay bây giờ. Sổ tay MySQL của tôi ở đâu? :)

+2

Nếu bạn đã sử dụng dấu thời gian PHP số, bạn cần hàm bổ sung này «UNIX_TIMESTAMP (NOW() - INTERVAL 1 YEAR);' –

-3
DELETE FROM table WHERE date < '2011-09-21 08:21:22'; 
1

Hibernate (HQL) Xóa các bản ghi cũ quá 7 ngày

Tôi không chắc chắn, nhưng bạn có thể Hãy thử điều này:

String hqlQuery = "from PasswordHistory pwh " 
      + "where pwh.created_date < datediff(curdate(), INTERVAL 7 DAY)"; 

      List<Long> userList = (List<Long>)find(hqlQuery); 
    deleteAll(userList);// from baseDao 

public void deleteAll(Collection list) { 
     getHibernateTemplate().deleteAll(list); 
    } 
Các vấn đề liên quan