Avatar billede para7 Nybegynder
05. maj 2010 - 20:59 Der er 21 kommentarer og
1 løsning

SQL datediff

Jeg er gået fast med noget datediff. Jeg skal hente records fra en MySql Database. Det jeg skal hente må højst være 7 dage gammelt. Jeg skal vel bruge noget datediff.

Jeg har dog lige det problem at det der er indskrevet i databasen har formatet dd-mm-yyyy.

Er der nogen der kan hjælpe med en kode?

Jeg har prøvet med det her:

strSQL = "SELECT  * FROM clip WHERE clipAktivt = 1 AND WHERE DateDiff("d", datefield, date) < 7 "
Avatar billede arne_v Ekspert
05. maj 2010 - 21:04 #1
Maaske:

strSQL = "SELECT  * FROM clip WHERE clipAktivt = 1 AND WHERE DateDiff(NOW(), datefield) < 7 "
Avatar billede para7 Nybegynder
05. maj 2010 - 22:02 #2
Tak men syntax error. Eagleeye svarede engang her: http://www.eksperten.dk/spm/465107
Men jeg får også syntax error med det forslag.
Avatar billede arne_v Ekspert
05. maj 2010 - 22:08 #3
Har du en fejl tekst?

Hvis du ike faar den i ASP saa proev og udfoer SQL i et andet tool.
Avatar billede mitbrugernavn Praktikant
05. maj 2010 - 22:17 #4
strSQL = "SELECT  * FROM clip WHERE clipAktivt = 1 AND datefield < DateAdd("d",date(),7)"
Avatar billede para7 Nybegynder
05. maj 2010 - 22:37 #5
Tak men:

strSQL = strSQL & "AND AND clipDato < DateAdd("d",date(),7) "
-----------------------------------------------^
Avatar billede para7 Nybegynder
05. maj 2010 - 22:37 #6
Det skulle pege på "d" ...
Avatar billede para7 Nybegynder
05. maj 2010 - 22:57 #7
det her er det tætteste på noget der virker, men det giver ikke lissom de sidste 7 dage:

strSQL = strSQL & "AND DATE_ADD(clipDato, INTERVAL 7 DAY) > Now() "

Bliver ikke rigig klog på MySql manualen her:
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-add
Avatar billede para7 Nybegynder
05. maj 2010 - 23:41 #8
Det her gir ingen records:
strSQL = strSQL & "AND clipDato BETWEEN DATE_SUB(now(), INTERVAL 7 DAY) AND now() "
Avatar billede mitbrugernavn Praktikant
06. maj 2010 - 00:30 #9
strSQL = "SELECT  * FROM clip WHERE clipAktivt = 1 AND clipDato < DateAdd("d",date(),7)"

' når du laver dette - DateAdd("d",date(),7) - så lægger du 7 dage til dagsdato

datofeltet som jeg tro hedder clipDato er det sat til dato format

7_dage = DateAdd("d",date(),7)

hvis det er mysql db så:
ny_dato = year(7_dage)&"-"&month(7_dage)&"-"&day(7_dage)
strSQL = "SELECT  * FROM clip WHERE clipAktivt = 1 AND clipDato < '"&ny_dato&"'"

hvis det er access db så:
ny_dato = month(7_dage)&"-"&day(7_dage)&"-"&year(7_dage)
strSQL = "SELECT  * FROM clip WHERE clipAktivt = 1 AND clipDato < #"&ny_dato&"#"
Avatar billede para7 Nybegynder
06. maj 2010 - 07:46 #10
Tak mitbrugernavn, men stadig ingen udvælgelse af de sidste 7 dage sker.
Avatar billede para7 Nybegynder
06. maj 2010 - 07:50 #11
Hov, korrektion:
Tegnet er ugyldigt, siges der - sltså det må være underscore...
Avatar billede para7 Nybegynder
06. maj 2010 - 08:22 #12
clipDate feltet er alm. tekstfelt af andre grunde, men det burde kunne anvendes.
Avatar billede mitbrugernavn Praktikant
06. maj 2010 - 08:44 #13
strSQL = "SELECT  * FROM clip WHERE clipAktivt = 1 AND cdate(clipDato) > '"&ny_dato&"'"

men tjek lige hvordan ny_dato skal stå dd-mm-yyyy eller mm-dd-yyyy eller yyyy-mm-dd
Avatar billede para7 Nybegynder
06. maj 2010 - 08:50 #14
Jeg forstår ikke det med ny_dato. Hvad skal jeg sætte i stedet for ny_dato?
Avatar billede para7 Nybegynder
06. maj 2010 - 08:50 #15
clipDate er af typen varchar.
Avatar billede para7 Nybegynder
06. maj 2010 - 08:51 #16
clipDate feltet indeholder dd-mm-yyyy
Avatar billede para7 Nybegynder
06. maj 2010 - 08:52 #17
Bekræfter at det er MySql database.
Avatar billede para7 Nybegynder
06. maj 2010 - 08:53 #18
Fx  year(7_dage) som du skriver kan jeg ikke forstå. hvor kommer 7_dage ind i billedet?
Avatar billede para7 Nybegynder
06. maj 2010 - 09:17 #19
Tak so far...
Jeg kan pinpointe en enkelt dag ad gangen ved brug af ':

'strSQL = strSQL & "AND clipDato = '29-04-2010' "

Følgende virker ikke, tager nogle gamle datoer:
'strSQL = strSQL & "AND clipDato > '" & DateAdd("d",date(),-8) & "' "

Følgende ret klodsede streng virker faktisk:
strSQL = strSQL & "AND (clipDato = '" & DateAdd("d",date(),-7) & "' OR clipDato = '" & DateAdd("d",date(),-6) & "' OR clipDato = '" & DateAdd("d",date(),-5) & "' OR clipDato = '" & DateAdd("d",date(),-4) & "' OR clipDato = '" & DateAdd("d",date(),-3) & "' OR clipDato = '" & DateAdd("d",date(),-2) & "' OR clipDato = '" & DateAdd("d",date(),-1) & "') "
Avatar billede para7 Nybegynder
06. maj 2010 - 09:19 #20
Hvilket giver enskrevet aql sætning:

SELECT * FROM clip WHERE clipAktivt = 1 AND (clipDato = '29-04-2010' OR clipDato = '30-04-2010' OR clipDato = '01-05-2010' OR clipDato = '02-05-2010' OR clipDato = '03-05-2010' OR clipDato = '04-05-2010' OR clipDato = '05-05-2010') AND clipTitel NOT LIKE '%Pause %' order by clipTaeller desc LIMIT 7
Avatar billede para7 Nybegynder
11. maj 2010 - 12:59 #21
Ingen bedre forslag, så jeg lukker...
Min løsninghttp://www.eksperten.dk/spm/908919
Avatar billede para7 Nybegynder
11. maj 2010 - 12:59 #22
Lukker...
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



Seneste spørgsmål Seneste aktivitet
43 min siden Poe strøm Af lurup i LAN/WAN
I går 14:46 GIF-EDITOR Af snestrup2000 i Billedbehandling
I går 14:03 Logge ind Af Bob i PC
I går 12:12 2 skærme - 1 virker - den anden siger No signal Af eksmojo i Skærme
I går 10:33 openvpn projekt Af dcedata1977 i Windows