Avatar billede stoff Nybegynder
15. marts 2001 - 12:40 Der er 12 kommentarer og
2 løsninger

Slette 7 dage gamle records

Jeg er ved at lave en hjemmeside der benytter sig af SQL. Jeg har her brug for at kunne slette alle records der er mere end 7 dage gamle i et table. Jeg har lavet det med nogle loop\'er, men det er ikke hensigtsmæssig. Så er det muligt at lave én SQL setning der gør dette, noget som: \"SELECT * FROM count WHERE DateDiff(\"d\",start,end) > 7\"? (Jeg ved godt at der ikke er noget der hedder dette, med det er blot for at præcisere hvad det er jeg taler om...
Avatar billede carpediem Nybegynder
15. marts 2001 - 12:54 #1
SELECT * FROM Count WHERE ((start - end)<7)
Avatar billede torbenkoch Nybegynder
16. marts 2001 - 07:37 #2
Din ide med Datediff er glimrende (og den findes altså i T-SQL !) - så hvis vi antager, at du har et et felt med oprettelsesdato i tabellen, så skulle noget i denne stil gøre det:

delete TABLE where datediff(\"d\", datefield, getdate() > 7)

Hvis du ikke har en oprettelsesdato i tabellen, bliver det straks mere vanskeligt!

Avatar billede stoff Nybegynder
16. marts 2001 - 08:53 #3
Jeg har ikke et oprettelsesdato felt, som jeg regner med at er noget man kan sætte sin database til automatisk at skrive på records lige så snart de bliver oprettet. Men jeg har et felt med en dato (som jeg selv skriver til databasen), men formatet 01-01-01 12:12:12 (standard format). Kan jeg bruge dette felt til at slette efter?

(hvis det er et svar, så husk at vælge \"Svar\" og ikke \"Komentar\", men tak torbenkoch...)
Avatar billede slash Nybegynder
16. marts 2001 - 10:38 #4
jeps... du skulle kunne bruge dit eget datefelt til at slette efter! Hvis du automatisk vil have sql-serveren til at sætte en oprettelsesdato kan du i feltet for en dato i default value angive getdate()

så det er bare at smide dit sql ind i en stored procedure og opette et job for din stored procedure og sæt jobbet til at eksekvere alt efter behov :-(=)
Avatar billede proaccess Nybegynder
16. marts 2001 - 10:42 #5
Da dato og klokkeslet bliver \"gemt\" som et flydende tal, med dato som delen før decimaltegnet, burde du kunne bruge denne:

DELECT * FROM count WHERE Date() - start > 7;

Hvor Date() er den aktuelle dato, start er dit datofelt og count dit tabelnavn.

HDH
ProAccess
Avatar billede torbenkoch Nybegynder
16. marts 2001 - 13:16 #6
Stoff, du kan godt bruge dit eget datofelt - jeg antager her at dit datofelt er af typen char eller varchar. I så fald skal du gøre sådan (og bemærk, at jeg samtidigt retter en fejl i min oprindelige kommentar, hvor jeg havde d i \"\" - det skal man nemlig ikke - endvidere var der vist en parentesfejl - det var vist for tidligt på dagen *S*):

delete TABLE where datediff(d, CONVERT(datetime, DATOFELT), getdate()) > 7

Slå evt. CONVERT funktionen op i Online Books - den er ganske anvendelig til mange ting!
Avatar billede torbenkoch Nybegynder
20. marts 2001 - 07:48 #7
Skal du ikke have spørgsmålet lukket??
Avatar billede torbenkoch Nybegynder
22. marts 2001 - 18:59 #8
Kan man af den lange tid hermed udlede, at Stoff hører til blandt nasserne - og derfor ikke bør befinde sig her på Eksperten? Det vil jeg mene - sørgeligt...
Avatar billede slash Nybegynder
22. marts 2001 - 19:28 #9
torbenkoch >> HØRT    :O)
Avatar billede stoff Nybegynder
23. marts 2001 - 08:20 #10
Det vil jeg gerne kommentere på... For det er ikke helt kortkt... Jeg har prøvet de forskellige svar (dog ikke dem alle sammen endnu, da jeg ikke sidder \"hocked up\" 24 timer i døgnet, men snart). Men dem jeg har prøvet virkede IKKE, \"CONVERT\" commandoen virkede ikke, jeg har prøvet at gøre de forskelige, men jeg er kun en NYBEGYNDER inde for SQL, så om jeg må be....... Spørgsmålet bliver snart lukket, men jeg har ikke fundet et svar jeg kunne bruge, og det er fordi at jeg gør noget forkert, fordi at den SQL server jeg bruger ikke er kompatibel med de kommandoer I kommer med, eller de svar jeg får ikke er så udførlige som de måske kunne være... Jeg tilbringer MAX 2 til 3 gange på nette om UGEN, så hvis jeg må be om lidt tolmodighed... Jeg har også andre ting at give mig til... (P.S. jeg ved godt at jeg ikke staver så got!)... Men tak for svarene, jeg kigger på dem så hurtig som muligt...
Avatar billede stoff Nybegynder
23. marts 2001 - 08:21 #11
Hvis der ikke sker mere her, så lukker jeg dette mandag eller tirsdag...
Avatar billede torbenkoch Nybegynder
23. marts 2001 - 11:29 #12
Vi har jo stillet nogle uddybende spørgsmål - for bedre at kunne hjælpe dig - dem har du ikke gidet svare på. Du har heller ikke gidet fortælle os, at du ikke har kunnet få det til at virke.

Da vi stadig ikke ved, hvordan dit datofelt er opbygget (datetime, char, varchar eller hvad) er det jo lidt svært. Mit eksempel virker fint i den beskrevne situation, men den svarer jo så åbenbart ikke til din.

Så hvis du fortæller os, hvad der går galt hos dig (fejlmeddelelser osv.), version af sql serveren osv. så kan det jo være, at vi kan hjælpe dig!

Avatar billede slash Nybegynder
23. marts 2001 - 11:39 #13
for at være krakilsk - hvorfor er det ikke optimalt at loope? Jeg da en mailtabel.... og når folk synes der skal sendes en mail, så generes der ca. 500 mails og de er i udbakken i outlook på under 5 minutter :O) Og jeg looper mig igennem min adressetabel og mailteksttabel!
Avatar billede stoff Nybegynder
23. marts 2001 - 12:06 #14
Jeg har lånt en bog på bibbet, der vil jeg kigge i for at få de ting beskrevet som er kommet her... mange tak, for svarene, det har været langt nemmer at finde det jeg havde brug for, og har jeg har på baggrund af svarene fået noget til at vike (dog ikke optimalt)...
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