Avatar billede verakso Nybegynder
05. marts 2008 - 23:07 Der er 21 kommentarer og
1 løsning

Seriøst problem med at forespørge på dato intervaller

Jeg har et seriøst irriterende problem, med at kunne forespørge korrekt op data i intervaller.

Jeg hat en rapport der kører en forespørgsel, hvor brugeren skal angive til og fra dato.

Oprindeligt var den lavet som

Between [Fra dato] And [Til dato]

Men det lader til til at kommandoen tager data IMELLEM de to datoer - det jeg har bruger for er en fra og med dato og en til og med dato.

Derfor skrev jeg den om til dette i forespørgslen

>=[Fra dato] And <=[Til dato]

Men, nu kommer poster med fra datoen også med, men de poster der er på selv til datoen, kommer IKKE med!

Jeg er ved at blive vanvittig over det her så der er point og taknemmelighed for hjælp.
Avatar billede kabbak Professor
05. marts 2008 - 23:11 #1
hvis "Between [Fra dato] And [Til dato]" kun tager imellem, så prøv

Between [Fra dato]-1 And [Til dato]+1
Avatar billede kabbak Professor
05. marts 2008 - 23:18 #2
virker ikke, men jeg har liget testet
Between [Fra dato] And [Til dato]

den tager begge datoer med altså  både Fra dato og Til dato
Avatar billede verakso Nybegynder
05. marts 2008 - 23:20 #3
Smidder en fejl og påstår at udtrykket er stavet forkert, eller for komplekst til at blive vist.

Kunne have noget at gøre med at det er en dato der skal regnes på.

Skal udtrykket ikke castes til en en smalldate eks.?
Avatar billede verakso Nybegynder
05. marts 2008 - 23:25 #4
Hmm et eller andet galt er der altå

Jeg spørger på poster i intervallet 01-02-2008 til 29-02-2007, og resultatet er, at de tre poster der er d. 29-02-2007 kommer ikke med.
Avatar billede kabbak Professor
05. marts 2008 - 23:31 #5
er det så ikke fordi at dit datofelt er med klokkeslet,, for 29-02-2007 er det samme som
29-02-2007 00:00
Avatar billede kabbak Professor
05. marts 2008 - 23:35 #6
I dato feltet kan du oversætte datotid til dato ved at gøre sådan

Date: Int([Dato])

under egenskaber skla du så sætte formatet til dd-mm-yyyy
Avatar billede verakso Nybegynder
05. marts 2008 - 23:38 #7
Jeps de er i formatet eks. 04-01-2008 13:33:00 og jeg har forsøgt at ændre det i tabellen til at være en smalldate, men det er tilsyneladende ikke nok.

Men hvordan kan jeg typecaste datoen til kun at være en dato i forespørgslen?
Avatar billede kabbak Professor
05. marts 2008 - 23:53 #8
se foregående kommentar
Avatar billede verakso Nybegynder
06. marts 2008 - 00:33 #9
Jeg må sgu være en båtnakke til det her for et eller andet fundamentalt er der altså galt

Date: Int([Dato]) og egenskaber til dd-mm-yyyy har jeg dappet ind, men den tager altså stadigt alle data med, også fra januar.

Det kunne tyde på at forespørgslen ikke fatter hvad jeg dapper ind, og derfor tager alt med
Avatar billede mugs Novice
06. marts 2008 - 06:59 #10
Kan du ikke i forespørgslen lave et udtryk, der konverterer dit lange dato- og Klformat til kun af have dd-mm-yyyy, og så køre din between på dette udtryk.
Avatar billede Slettet bruger
06. marts 2008 - 07:37 #11
Jeg vil mene at du ikke skal bruge date i din forespørgsel med mindre du har brug for dagsdato, det er jo et reserveret ord....

Hvis du har en fra og en til dato i langt dato format, så vil til datoen jo have tidspunktet 00:00:00 så derfor vil denne dag ikke medtages...

Når du nu har lavet tabelstrukturen om til kort datoformat, så burde det virke, du skal også lige have [Fra dato] og [Til dato] i kort format. Der er jo også notationen format([Dit felt];"short date") som du kan arbejde med...

Så lav ordet Date om og få [Dato], [Fra dato] og [Til dato] til at være kort datoformat...

For god ordens skyld, så tager Between både start og slutdato med!~)
Avatar billede Slettet bruger
06. marts 2008 - 07:44 #12
"Hvis du har en fra og en til dato i langt dato format, så vil til datoen jo have tidspunktet 00:00:00 så derfor vil denne dag ikke medtages..."

Dvs. Between 01-02-2007 00:00:00 And 29-02-2007 00:00:00

Her vil den 29-02-2007 ikke komme med...
Avatar billede terry Ekspert
06. marts 2008 - 19:05 #13
I have a table with these dates (no time)

DateOnly
06-03-2008
03-06-2008
28-03-2008

The following SQL returns all records

SELECT tblDateOnly.DateOnly
FROM tblDateOnly
WHERE (((tblDateOnly.DateOnly) Between #3/6/2008# And #6/3/2008#));


If I now add a time to the date

DateOnly
06-03-2008 13:00:00
03-06-2008 23:59:58
28-03-2008 00:00:01

The same SQL only returns

DateOnly
06-03-2008 13:00:00
28-03-2008 00:00:01


So I also need to put a time in the criteria
SELECT tblDateOnly.DateOnly
FROM tblDateOnly
WHERE (((tblDateOnly.DateOnly) Between #3/6/2008 00:00:00# And #6/3/2008 23:59:59#));


Which now returns all records
DateOnly
06-03-2008 13:00:00
03-06-2008 23:59:58
28-03-2008 00:00:01
Avatar billede terry Ekspert
06. marts 2008 - 19:06 #14
So if you dont have a time in the date field you dont need a time in the crtiteria.
If you have at time in the date field you also need a time in  the criteria.
Avatar billede kabbak Professor
06. marts 2008 - 19:43 #15
SELECT DateSerial(Year([dato]),Month([dato]),Day([dato])) AS RenDato, tblDato.Beløb
FROM tblDato
WHERE (((DateSerial(Year([dato]),Month([dato]),Day([dato]))) Between CDate([Fra dato]) And CDate([Til dato])));
Avatar billede hugopedersen Nybegynder
07. marts 2008 - 07:24 #16
Kunne en årsag ikke være at den 29-02-2007 ikke er en gyldig dato? I 2007 var sidste dag i 2. måned mig bekendt den 28. og Access er berømt for at lave sjove ting med ugyldige datoer.
Avatar billede terry Ekspert
07. marts 2008 - 11:38 #17
Hi Hugo
Your right about 29 feb 2007.

And I dont even think Access would accept this date so I'm very puzzled as to what verakso says.
"at de tre poster der er d. 29-02-2007 kommer ikke med."
Avatar billede mugs Novice
07. marts 2008 - 12:04 #18
Hvis Access accepterer 29-02-2007 kan der simpelthen ikke være tale om et datofelt.
Avatar billede verakso Nybegynder
07. marts 2008 - 21:52 #19
Okay, tak for de fine svar, jeg er blot så langt bagefter, at jeg ikke har fattet at vi er nået til 2008.

Jeg mener selvfølgelig 29-02-2008.

Det er også korrekt, at jeg "fejlagtigt" ikke troede at begge datoer kom med i Between, men det er jo fordi at de værdier jeg søger på er en DateTime altså dd-mm-åååå tt:mm:ss

Jeg må lige kigge nærmere de forslag der er kommet, men det undrer mig at stadigt Between kun tager til dd-mm-åååå 00:00:00 og ikke til dd-mm-åååå 23:59:59
Avatar billede terry Ekspert
08. marts 2008 - 09:12 #20
between is the same as

WHERE (((tblDateOnly.DateOnly) Between #3/6/2008 00:00:00# And #6/3/2008 00:00:00#));

So (in this example)
If DateOnly was #6/3/2008 00:00:01# then even though the date is OK, the time isnt.
Avatar billede verakso Nybegynder
10. marts 2008 - 22:34 #21
Mand! Livet er bare for kort til dårligt database design, og jeg er lidt træt af at skulle sidde og rode bod på andres dårlige planlægning.

Hvordan man i alverden kan finde på at lave en tabel for et langt datofelt ligger som tekst fatter jeg ikke, men..

Jeg har fået noget nogenlunde brugbart flikket sammen ved hjælp af Kabbak's eksempel:

SELECT DateSerial(Year([dato]),Month([dato]),Day([dato])) AS RenDato, tblDato.Beløb
FROM tblDato
WHERE (((DateSerial(Year([dato]),Month([dato]),Day([dato]))) Between CDate([Fra dato]) And CDate([Til dato])));

Det virker så kudos goes to Kabbak
Avatar billede kabbak Professor
10. marts 2008 - 23:08 #22
et svar ;-))
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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

IT-JOB