Avatar billede para7 Nybegynder
30. juli 2009 - 15:58 Der er 15 kommentarer og
2 løsninger

Datediff i SQL

Jeg har et bookingsystem der skal slette bookingtider der er udløbet. Jeg har kommet til at lave det forkert og der slettes forkerte tider (ups). Hare googlet på datediff for sql men de virker ikke. Kan nogen hjælpe med at lave rigtig sql?

Her er hvad jeg har til oprydning, sletning af udløbne tider:

'Udløbne tider slettes:
strSQLopt = " DELETE from  Booking "
strSQLopt = strSQLopt & " where Lokalitet = '" & request.querystring("Lokalitet") & "' "
strSQLopt = strSQLopt & " and Dato <= '" & cstr(datoNu) & "' "
strSQLopt = strSQLopt & " and left(Tid,5) < '" & FormatDateTime(nowCorr, vbShortTime) & "' "
objConn.execute(strSQLopt)
Avatar billede para7 Nybegynder
30. juli 2009 - 16:39 #1
Jeg kan koge det lidt ned:

'Udløbne tider slettes:
strSQLopt = " DELETE from Booking "
strSQLopt = strSQLopt & "  where Dato <= '" & cstr(datoNu) & "' "
objConn.execute(strSQLopt)

Kom med et bud :)
Avatar billede keysersoze Guru
30. juli 2009 - 16:55 #2
strSQLopt = strSQLopt & "  WHERE Dato <= GETDATE()"
Avatar billede para7 Nybegynder
30. juli 2009 - 17:34 #3
Tak keysersoze, men jeg har lige bemærket at dato feltet i min Access db er et tekst felt. Så går det vel ikke som du har skrevet.

Jeg fandt en gammel eagleeye post, hvor jeg har kommet frem til noget, som jeg ikke ved om komer til at virke. Kan nok oprette en fake dato i databsen et døgn gammel, og så se. Kan det være noget lignende:

'Udløbne tider slettes:
strSQLopt = " DELETE from Booking "
strSQLopt = strSQLopt & "  where DateDiff('n'," & cstr(datoNu) & ", Date()) < '1' "
objConn.execute(strSQLopt)
Avatar billede para7 Nybegynder
30. juli 2009 - 17:36 #4
Det her er nok mere korrekt, og det er jo minutbaseret:

'Udløbne tider slettes:
strSQLopt = " DELETE from Booking "
strSQLopt = strSQLopt & "  where DateDiff('n'," & datoNu & ", Date()) < 1 "
objConn.execute(strSQLopt)
Avatar billede para7 Nybegynder
30. juli 2009 - 17:46 #5
Jeg har afprøvet forslagene, se kommentar:

'Udløbne tider slettes:
strSQLopt = " DELETE from Booking "
'strSQLopt = strSQLopt & "  where DateDiff('n'," & datoNu & ", DATE()) < = 1 " 'Mangler operator...
'strSQLopt = strSQLopt & "  WHERE Dato <= GETDATE()" 'Meddelelse om manglende funktion
strSQLopt = strSQLopt & "  WHERE Dato <= DATE()" 'Sletter bagud som den skal, men sletter datoer i næste måned
response.Write "strSQLopt: " & strSQLopt
objConn.execute(strSQLopt)
Avatar billede para7 Nybegynder
30. juli 2009 - 17:46 #6
('Sletter bagud som den skal, men sletter TIDER i næste måned)
Avatar billede para7 Nybegynder
30. juli 2009 - 17:49 #7
Mit datosyntaks i db Dato er: dd-mm-åååå og som sagt er dataformatet Tekst.
Avatar billede para7 Nybegynder
30. juli 2009 - 17:58 #8
Denne ser ud til at fungere. Mellemum fjernet i < =
Skal afprøves noget mere:

strSQLopt = strSQLopt & "  where DateDiff('n'," & datoNu & ", DATE()) <= 1 "

Andre bedre forslag er meget velkomne...
Avatar billede keysersoze Guru
30. juli 2009 - 19:00 #9
mit forslag var også til mssql så det ville ikke fungere under alle omstændigheder. Konverteringen kan jeg ikke lige svare på, men man kunne frygte dato-problemer hvis ikke den modtagne dato er i korrekt format - den skal være MM-DD-YYYY, fx;

WHERE datofelt < "#" & Month(Date()) & "-" & Day(Date()) & "-" & Year(Date()) & "#"

Men har du ikke mulighed for at konvertere dit tekstfelt til et dato-felt - det vil alt andet lige blive lettere at arbejde med.
Avatar billede para7 Nybegynder
30. juli 2009 - 19:42 #10
Altså så går det ikke an at konvertere det, da der er mange forskellige kald til feltet. Jeg må holde øje med om det fortsætter med at virke. smid lige et svar for hjælp og nogle point :)
Avatar billede keysersoze Guru
30. juli 2009 - 19:56 #11
jeg skal kun have point hvis jeg har været til hjælp - så få det nu testet ordentligt igennem :)
Avatar billede para7 Nybegynder
30. juli 2009 - 21:08 #12
Dine ideer har ihvertfald hjulpet til en løsning, så vi kan dele. Tak for nu :)
Avatar billede para7 Nybegynder
31. juli 2009 - 09:11 #13
Mærkeligt nok virker funktionen ikke i dag. Udløbne tider slettes ikke mere. så jeg har slået det fra og vil se, om de gamle tider kommer i vejen.
Avatar billede para7 Nybegynder
31. juli 2009 - 09:15 #14
Jo, med lidt forsinkelse virker det alligevel.
Avatar billede keysersoze Guru
31. juli 2009 - 09:57 #15
forsinkelse? - det lyder spændende :)
Avatar billede para7 Nybegynder
31. juli 2009 - 10:05 #16
Ja, og nu synes jeg ikke det virker alligevel. Det er noget giftigt noget, det datohalløj. Men sålænge bookede tider ikke forsvinder, er jeg lykkelig... ;)
Avatar billede para7 Nybegynder
08. august 2009 - 10:17 #17
Har slået det fra. dEt virkede ikke som det skulle. Mærkeligt at man ikke kan håndtere sådan noget og ingen har nogle rigtige løsninger.
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
Kurser inden for grundlæggende programmering

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