Trong bảng trong datatase của tôi, tôi có một cột dữ liệu lưu trữ thời gian mà bản ghi được thêm vào. Làm thế nào tôi có thể xóa tất cả các bản ghi cũ hơn một ngày khi tôi chạy một thủ tục được lưu trữ (xem xét thời gian hiện tại)?Xóa các mục cũ hơn một ngày - SQL Server
Trả lời
tôi thường tư vấn chống lại thực sự xóa dữ liệu từ cơ sở dữ liệu của bạn bởi vì bạn không bao giờ biết khi nào bạn có thể cần phải quay trở lại và phục hồi hoặc rollback đến kỷ lục trước đó vì tham nhũng dữ liệu hoặc kiểm toán, vv Thay vào đó, tôi sẽ thêm tiêu đề cột bit giống như "IsDeleted" và đặt các mục cũ trong ngày thành true bằng cách sử dụng câu lệnh cập nhật.
Something như
'UPDATE tablename SET IsDeleted = 1 WHERE (DATEDIFF(day,DateCreatedOn,GETDATE()) > 0)
đâu DateCreatedOn là nơi đã tạo ra trên hoặc ngày timestamp sẽ đi
Đây là một khái quát khó mà không biết vấn đề được đặt ra. Có nhiều lý do chính đáng để xóa dữ liệu là không. Nếu bạn cần khôi phục hoặc khôi phục, đó là lý do tại sao bạn có bản sao lưu. Nếu hoạt động chuẩn của ứng dụng có nghĩa là bạn không còn cần dữ liệu nữa, hãy xóa dữ liệu. – Joe
Nếu bạn không bao giờ xóa dữ liệu, cuối cùng - chắc chắn - các bảng quá đông sẽ dẫn đến hiệu suất bị suy giảm. Nếu bạn phải giữ dữ liệu "nóng", sao chép dữ liệu vào bảng lưu trữ và sau đó xóa khỏi nguồn, có thể sau giờ làm việc, phải là một lựa chọn khả thi. –
Tôi thừa nhận đó là một chút quá nhiệt tình, nhưng tốt hơn là có nó và không cần nó, sau đó không có nó và cần nó. Hãy tưởng tượng loại phản hồi bạn nhận được từ khách hàng nói rằng họ cần tất cả hồ sơ bán hàng từ đơn đăng ký thương mại điện tử của họ trong 5 năm qua và phản hồi của bạn đối với họ là "Chúng tôi đã xóa nó vì cũ và hiện không cần thiết ứng dụng". Chỉ vì bản thân ứng dụng có thể không cần dữ liệu, điều đó không có nghĩa là ứng dụng khách không cần nó và có thể thực hiện mà không cần. –
Khi nói đến SQL, bạn phải chỉ định ý nghĩa của từ "cũ hơn một ngày".
DATEDIFF: nó sử dụng nửa đêm ranh giới ngày vì vậy hãy chạy nó ở 19 tháng 10 00:05 và bạn sẽ xóa hàng phút 6 tuổi (18 tháng 10 23:59)
24 giờ?
Hôm qua nửa đêm? Chạy mã vào ngày 19 tháng 10, xóa hàng trước ngày 18?
Ngoài ra, không đặt hàm trên cột.
này giả 24 giờ đến phút:
DELETE
MyTableWhere
WHERE
MyColumn < DATEADD(day, -1, GETDATE())
này giả hôm qua nửa đêm:
DELETE
MyTableWhere
WHERE
MyColumn < DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), -1)
Giả sử cột ngày là "RecordCreatedDate"
DELETE FROM yourtable ĐÂU RecordCreatedDate < DATEADD (d, -1, GETDATE())
Tôi chỉ lưu ý rằng nếu cơ sở dữ liệu của bạn có hàng triệu hàng, bạn nên có chỉ mục trên cột RecordCreatedDate và có thể thực hiện xóa hàng loạt nhỏ hơn nếu bạn sẽ loại bỏ một lượng lớn dữ liệu.
xóa khỏi Bảng điều khiển của bạn trong đó DateColumn < getdate() - 1
- 1. xóa các hàng sqllite android cũ hơn x ngày
- 2. Xóa hồ sơ có ngày cũ hơn 3 ngày, để thực hiện công việc 3 ngày?
- 3. SQL Server chọn nơi datetimeoffset cũ hơn 1 giờ
- 4. để xóa các tập tin cũ hơn một ngày cụ thể
- 5. Cách xóa tệp cũ hơn X giờ
- 6. Đang cố gắng để xóa các tập tin cũ hơn x ngày vb.net
- 7. câu lệnh SQL để xóa các bản ghi cũ hơn XXX miễn là có hơn hàng YY
- 8. Xóa tệp cũ hơn X phút
- 9. SQL Server DELETE chậm hơn với chỉ mục
- 10. SQL Nhận tất cả các bản ghi cũ hơn 30 ngày
- 11. Oracle SQL Where khoản để tìm hồ sơ ngày cũ hơn 30 ngày
- 12. Truy vấn SQL để xóa các hàng cũ nhất trên một số hàng nhất định?
- 13. bộ lọc django cũ hơn ngày?
- 14. Microsoft SQL Server 2008 - Ngày
- 15. Truy vấn SQL để xóa các bản ghi cũ hơn hai năm
- 16. Thứ tự chỉ mục SQL Server (trường ngày giờ)
- 17. Xóa các div cũ nếu có nhiều hơn 20 | jQuery
- 18. Cách tốt nhất để lưu trữ ngày cũ trong SQL Server
- 19. tìm thấy nếu ngày là cũ hơn 30 ngày
- 20. Xóa các phiên bản của mỗi tệp trong một thùng S3 của Amazon cũ hơn X ngày
- 21. Chuyển đổi ngày giờ của SQL Server thành định dạng ngày ngắn hơn
- 22. Python - xóa các tệp cũ
- 23. Hadoop - Hive: Xóa dữ liệu cũ hơn số ngày được chỉ định
- 24. Chuyên gia MySQL: Xóa tất cả các hàng cũ hơn x ngày nhưng không phải trước hết là
- 25. Tìm ngày gần nhất trong SQL Server
- 26. Chuyển đổi cột từ ngày sang ngày giờ Sql Server
- 27. So sánh một chuỗi ngày với datetime trong SQL Server?
- 28. Đặt chỉ mục SQL Server số nhỏ
- 29. Chuyển đổi ngày sang các dấu tích trong SQL Server
- 30. Xóa các hàng "trùng lặp" trong SQL Server 2010
Bạn nhận được điều này ngược. Dựa trên câu hỏi, "thatColumn" sẽ luôn trong quá khứ và cách bạn đã viết điều này, DATEDIFF của bạn sẽ luôn lớn hơn 0. Cách chính xác là: "DELETE FROM yourTable WHERE DATEDIFF (ngày, getdate(), thatColumn) <-1 " Hoặc:" DELETE FROM yourTable WHERE DATEDIFF (ngày, thatColumn, getdate())> 1 " –