Avatar billede kxh Nybegynder
20. juli 2004 - 11:33 Der er 6 kommentarer og
1 løsning

Slet records der er mere en 5 dage gamle

Hej

Hvordan skrive jeg en sql statement som sletter alle records der er ældre end fem dage...

jeg tænkte på lidt i den her istil

DELETE FROM Tabel
WHERE RegTime < DATEADD(day -5......)


Hilsen

Kim
Avatar billede dfens Nybegynder
20. juli 2004 - 11:37 #1
Du skal kigge på funktionen datediff.

Smid GetDate() og din dato (RegTime???) ind, og hvis resulatet er "> 5", så slet.
Avatar billede dfens Nybegynder
20. juli 2004 - 11:39 #2
Hvis du ikke lige har booksonline i nærheden, kommer her et udsnit:

DATEDIFF
Returns the number of date and time boundaries crossed between two specified dates.

Syntax
DATEDIFF ( datepart , startdate , enddate )

Arguments
datepart

Is the parameter that specifies on which part of the date to calculate the difference. The table lists dateparts and abbreviations recognized by Microsoft® SQL Server™.

Datepart Abbreviations
Year yy, yyyy
quarter qq, q
Month mm, m
dayofyear dy, y
Day dd, d
Week wk, ww
Hour hh
minute mi, n
second ss, s
millisecond ms


startdate

Is the beginning date for the calculation. startdate is an expression that returns a datetime or smalldatetime value, or a character string in a date format.

Because smalldatetime is accurate only to the minute, when a smalldatetime value is used, seconds and milliseconds are always 0.

If you specify only the last two digits of the year, values less than or equal to the last two digits of the value of the two digit year cutoff configuration option are in the same century as the cutoff year. Values greater than the last two digits of the value of this option are in the century that precedes the cutoff year. For example, if the two digit year cutoff is 2049 (default), 49 is interpreted as 2049 and 2050 is interpreted as 1950. To avoid ambiguity, use four-digit years.

For more information about specifying time values, see Time Formats. For more information about specifying dates, see datetime and smalldatetime.

enddate

Is the ending date for the calculation. enddate is an expression that returns a datetime or smalldatetime value, or a character string in a date format.

Return Types
integer

Remarks
startdate is subtracted from enddate. If startdate is later than enddate, a negative value is returned.

DATEDIFF produces an error if the result is out of range for integer values. For milliseconds, the maximum number is 24 days, 20 hours, 31 minutes and 23.647 seconds. For seconds, the maximum number is 68 years.

The method of counting crossed boundaries such as minutes, seconds, and milliseconds makes the result given by DATEDIFF consistent across all data types. The result is a signed integer value equal to the number of datepart boundaries crossed between the first and second date. For example, the number of weeks between Sunday, January 4, and Sunday, January 11, is 1.

Examples
This example determines the difference in days between the current date and the publication date for titles in the pubs database.

USE pubs
GO
SELECT DATEDIFF(day, pubdate, getdate()) AS no_of_days
FROM titles
GO
Avatar billede runesoft Nybegynder
20. juli 2004 - 11:47 #3
dfens løsning er ikke den optimale rent performance mæssigt.
Løsningen beregner forskellen på hver enkelt række i databasen.

Dit eget forslag er bedre. Der beregner du tidspunktet for 5 dage siden og sammenligner det med indholdet i databasen. Det vil sige at det kan udnytte evt. indexes du har på kolonnen. Måske er det lidt flueknepperi, da det alligevel sikkert er sletningen der tager tid.
Avatar billede kxh Nybegynder
20. juli 2004 - 11:49 #4
hej jeg er selv kommet frem til følgende

DELETE FROM Tabel
WHERE RegTime <= (SELECT DATEADD(day,-5,getdate())
Avatar billede dfens Nybegynder
20. juli 2004 - 11:53 #5
Selvfølgelig....

runesoft har ret.
Avatar billede knowit-mmp Nybegynder
20. juli 2004 - 13:55 #6
"DELETE FROM Tabel WHERE RegTime <= getdate()-5 "

ville gøre det samme...Jeg ved ikke rent performance-mæssigt om der er forskel, men det ser pænere ud...
Avatar billede runesoft Nybegynder
20. juli 2004 - 17:45 #7
knowit-mmp->  Udseende er en smagssag :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester