Avatar billede tblaster Nybegynder
03. september 2005 - 17:37 Der er 14 kommentarer og
1 løsning

Sql udtræk med dato > datoen i går

Hejsa

Hvordan kan jeg arbejde med datoer i min sql? Jeg vil gerne kun trække poster ud hvor dato > dagen i går. Hvis jeg bruger følgende:

SELECT * FROM `dato` WHERE dato > now()-86400

Så trækker den alle poster ud hvor datoen er størrere end 02-09-2005 17:40, dette går ikke da jeg så kan få poster ud hvor datoen godt kan være 02-09-2005 og jeg skal kun have poster med datoen 03-09-2005 eller derover.
Avatar billede softspot Forsker
03. september 2005 - 17:40 #1
SELECT * FROM `dato` WHERE dato > dateadd("d",-1,now())
Avatar billede softspot Forsker
03. september 2005 - 17:41 #2
Aaaah, skal lige læse OG forstå inden man svarer :)

SELECT * FROM `dato` WHERE dato > format(now(),"yyyy-mm-dd")
Avatar billede softspot Forsker
03. september 2005 - 17:42 #3
men naturligvis kun sandsynlig at det fungerer i access og måske SQL Server...
Avatar billede tblaster Nybegynder
03. september 2005 - 17:44 #4
Det skal bruges til en MySQL 4.1.9 ... og ovenstående virker ikke i den.
Avatar billede softspot Forsker
03. september 2005 - 17:47 #5
Nej, det kunne jeg forestille mig :)

Jeg er desværre alt for lidt inde i mySQL, så jeg trækker mig ydmygt tilbage fra denne tråd :)
Avatar billede kjulius Novice
04. september 2005 - 22:03 #6
I mySQL kan du bruge enten DATE_ADD eller ADDDATE (som er synonymer), altså:

SELECT * FROM 'dato' WHERE dato > ADDDATE(CURDATE(), INTERVAL -1 DAY);

Men hvis du kun ønsker rows hvor datoen er større end dagen i går, så må det jo være dagen i dag, så hvorfor ikke bare returnere rows for dags dato?:

SELECT * FROM 'dato' WHERE dato = CURDATE();
Avatar billede kjulius Novice
04. september 2005 - 22:08 #7
Selv om dit felt er navngivet 'dato' ser det ud fra dit spørgsmål ud som om det er et datetime felt, og så bør du nok bruge DATE() funktionen til at extracte datedelen før sammenligningen:

SELECT * FROM 'dato' WHERE DATE('dato') = CURDATE();
Avatar billede tblaster Nybegynder
04. september 2005 - 22:56 #8
Årsagen til at jeg ikke bruger DATE('dato') = CURDATE() er at så får jeg ikke de poster ud der har en dato der er nyere end i dag, eks poster med datoen for i morgen.

Mht det første du skrev så vil jeg teste det i morgen.
Avatar billede kjulius Novice
04. september 2005 - 23:35 #9
Men så burde du jo bare kunne skrive >= CURDATE() i stedet for = CURDATE(). Dermed vil også fremtidige datoer komme med.
Avatar billede tblaster Nybegynder
05. september 2005 - 15:53 #10
Det virker! Har rettet min sql til føglende:
SELECT * From Dato Where StartDato >= CURDATE() and (SlutDato > CURDATE() Or SlutDato = '0000-00-00')

Problemet er bare at den ikke henter poster ud hvor SlutDato = '0000-00-00'. Hvad skal jeg lige gøre ved dette?
Avatar billede kjulius Novice
05. september 2005 - 21:26 #11
'0000-00-00' er ikke i det supportede range for en date eller datetime felttype.

MySQL Reference manualen siger hertil:

The DATETIME type is used when you need values that contain both date and time information. MySQL retrieves and displays DATETIME values in 'YYYY-MM-DD HH:MM:SS' format. The supported range is '1000-01-01 00:00:00' to '9999-12-31 23:59:59'. (“Supported” means that although earlier values might work, there is no guarantee)

The DATE type is used when you need only a date value, without a time part. MySQL retrieves and displays DATE values in 'YYYY-MM-DD' format. The supported range is '1000-01-01' to '9999-12-31'.

Er du sikker på, at du har lagret en dato på '0000-00-00'?
Avatar billede tblaster Nybegynder
05. september 2005 - 21:31 #12
yep :-D

Hvis jeg ændre datoen til 1000-01-01, vil det så mon virke?
Avatar billede kjulius Novice
05. september 2005 - 21:46 #13
Det burde det...
Avatar billede tblaster Nybegynder
09. september 2005 - 23:41 #14
super! Det virkede ... tak for hjælpen! Smid et svar.
Avatar billede kjulius Novice
10. september 2005 - 01:36 #15
Done!
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