2009-10-19 12 views

Odpowiedz

28

Można zbudować instrukcję DELETE, korzystając z funkcji datediff i getdate. Przykładem

Zastosowanie:

DELETE FROM yourTable WHERE DATEDIFF(day,getdate(),thatColumn) < -1 
+2

Masz to w tył. W oparciu o to pytanie, "thisColumn" zawsze będzie w przeszłości, a sposób w jaki to napisałeś, twój DATEDIFF zawsze będzie większy niż 0. Poprawny sposób to: "DELETE FROM yourTable WHERE DATEDIFF (day, getdate(), thatColumn) <-1 " Lub:" USUŃ Z TABELI WHERE DATEDIFF (dzień, ta kolumna, getdate())> 1 " –

5
Delete <TableName> 
Where DATEDIFF(day, <ColumnName>, getdate()) > 0 

Raj

+0

możesz zapomnieć o 'FROM';) – KB22

+3

Od nie jest wymagane z instrukcją usuwania :) – Raj

+1

+ 1, mój panie. ^^ – KB22

0

ja generalnie odradzam faktycznie usuwania danych z bazy danych, ponieważ nigdy nie wiadomo kiedy może trzeba wrócić i odzyskać lub wycofywania do poprzednich zapisów z powodu uszkodzenia danych lub audytu itp. Zamiast tego dodałbym nieco tytułu kolumny coś w stylu "IsDeleted" i ustawiłem stare wpisy na true przy użyciu instrukcji aktualizacji.

Coś

'UPDATE tablename SET IsDeleted = 1 WHERE (DATEDIFF(day,DateCreatedOn,GETDATE()) > 0) 

Gdzie DateCreatedOn gdzie Twój rekord Utworzono lub data datownik pójdzie

+3

To jest trudne uogólnienie, nie znając zestawu problemów. Istnieje tyle dobrych powodów, aby usuwać dane, ponieważ nie. Jeśli chcesz przywrócić lub odzyskać, dlatego masz kopie zapasowe. Jeśli standardowe działanie aplikacji oznacza, że ​​nie potrzebujesz już danych, usuń dane. – Joe

+0

Jeśli nigdy nie usuniesz danych, ostatecznie - nieuchronnie - przepełnione tabele spowodują obniżenie wydajności. Jeśli musisz przechowywać dane "na gorąco", skopiuj je do tabeli archiwum, a następnie usuń ze źródła, być może po godzinach, powinno być realną opcją. –

+0

Przyznam, że jest trochę zbyt gorliwy, ale lepiej go mieć i nie potrzebować, a potem go nie mieć i potrzebować. Wyobraź sobie odpowiedź, jaką otrzymasz od klienta, który twierdzi, że potrzebuje wszystkich rekordów sprzedaży z aplikacji e-Commerce w ciągu ostatnich 5 lat, a odpowiedź na nie brzmi: "Usunęliśmy go, ponieważ był stary i obecnie nie jest potrzebny podanie". Tylko dlatego, że sama aplikacja może nie potrzebować danych, nie oznacza to, że klient jej nie potrzebuje i może obejść się bez nich. –

-1

lub

ts> = teraz() - przedział 1 DZIEŃ

gdzie ts to nazwa kolumny daty i godziny

+1

I czy jego prace na SQL Server? – gbn

+0

Tak, to prawda. Przynajmniej na MySQL. – Zepplock

+0

Więc proszę przeczytać dokumentację przed -1 innymi osobami – Zepplock

28

Jeśli chodzi o SQL, musisz określić, co masz na myśli przez "starszy niż dzień".

  • DateDiff: używa dniową brzegowy północy więc uruchomić go na 19 października 00:05 i będziesz usuwać wiersze 6 minut życia (18 października 23:59)

  • 24 godzin?

  • Wczoraj o północy? Uruchom kod 19 października, usuń wiersze przed 18?

Nie należy również umieszczać funkcji w kolumnie.

Zakłada się przez 24 godzin do chwili:

DELETE 
    MyTableWhere 
WHERE 
    MyColumn < DATEADD(day, -1, GETDATE()) 

przyjmuje, wczoraj północy:

DELETE 
    MyTableWhere 
WHERE 
    MyColumn < DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), -1) 
0

Zakładając Data kolumny na "RecordCreatedDate"

usunąć z yourtable GDZIE RecordCreatedDate < DATAADD (d, -1, GETDATE())

Ostrzegam tylko, że jeśli baza danych zawiera miliony wierszy, powinieneś mieć indeks w kolumnie RecordCreatedDate i ewentualnie robić mniejsze operacje usuwania partii, jeśli usuniesz duże ilości danych.

Powiązane problemy