Avatar billede torotune Nybegynder
14. april 2008 - 13:33 Der er 28 kommentarer og
2 løsninger

Udtræk på dato og dags dato

Hej.

Jeg har et felt i min tabel 'MinTabel' der hedder 'MinDato'.
Jeg vil så gerne trække alle de records ud fra 'MinTabel' hvor 'MinDato' figurerer inden for en måned fra dags dato.

Kan man gøre det som ren SQL uden at skulle kode?
Avatar billede jensen363 Forsker
14. april 2008 - 13:37 #1
SELECT MinTabel.MinDato
FROM MinTabel
WHERE (((MinTabel.MinDato) Between Date() And Date()-30));
Avatar billede mugs Novice
14. april 2008 - 13:54 #2
"inden for en måned fra dags dato"

forstår jeg som fremadrettet, d.v.s. where clause skal være date()+30
Avatar billede torotune Nybegynder
14. april 2008 - 14:43 #3
Hej begge, tak for en hurtig respons!

Ja, det det er fremadrettet, så +30 virker efter hensigten =)
Men jeg glemte at sige at der gerne må ses bort fra årstallet,
således at der kun bliver spurgt på dd/mm i MinDato.
Kan man bruge en slags date function der?
Avatar billede mugs Novice
14. april 2008 - 14:59 #4
Du kan uddrage måneden med en datepart:

Udtryk1: DatePart("m";[MINDATO];1;0)

og datoen:

Udtryk2: DatePart("d";[MINDATO];1;0)

derefter kan du indsætte dine kriterier.
Avatar billede torotune Nybegynder
15. april 2008 - 08:53 #5
Okay, det er smart. Så hvis jeg har

DatePart("d";Date();1;0)
DatePart("m";Date();1;0)

Må det i dag give 15 og 4

Hvordan konkatinerer jeg de to værdier så det bliver en dato der kan bruges/forståes af between-sætningen, og hvad vil Access have først, dato eller måned?
Avatar billede mugs Novice
15. april 2008 - 09:09 #6
Hvis du indsætter kriterier som f.eks. 15 under uftrykket med dato og 4 i udtrykket med måned, får du kun de poster, der er oprettet D 15. og i 4 måned uanset årstal.
Avatar billede jensen363 Forsker
15. april 2008 - 09:41 #7
Jeg tror ikke lige dette er en løsning lige til højrebenet, når du vil begrænse din søgning til kun at indeholde 30 dage fra en given kalenderdato og så vise disse fremadrettet uandet hvilket år der måtte gælde ...

Du søger i forhold til en heltalsværdi som i dag er 39553. til næste år vil den være 39918 ( 39553 + 365 ) o.s.v.
Avatar billede jensen363 Forsker
15. april 2008 - 09:48 #8
Du kan naturligvis eksperimenterer dig frem, og så fremskrive med eksempelvis et år ved hjælp af :

SELECT MinTabel.MinDato
FROM MinTabel
WHERE (((MinTabel.MinDato) Between Date() And Date()+30 Or (MinTabel.MinDato) Between Date()+365 And Date()+395));
Avatar billede mugs Novice
15. april 2008 - 10:01 #9
Og skudår?
Jeg ville til hver en tid beholde mit datofelt og beregne med årstal.
Avatar billede jensen363 Forsker
15. april 2008 - 10:04 #10
Mugs > hvordan ville din SQL sætning ( between ) i givet fald se ud ?
Avatar billede mugs Novice
15. april 2008 - 14:57 #11
Jeg har ikke eksperimenteret med en SQL, men udelukkende fokuseret på dine 365 dage. Det kan meget vel være, at det er ligegyldigt med skudår.

En SQL kan vel laves som en IFF sætning, idet et skudår jo kan defineres som deleligt med 4.
Avatar billede jensen363 Forsker
15. april 2008 - 15:12 #12
Mugs > jeg er helt med på din metode til at isolére dato og måned, men jeg kan ikke rigtigt se den i løsningen ...
Avatar billede mugs Novice
15. april 2008 - 15:19 #13
jensen > Jeg har også svært ved at se, hvorfor man skulle isolere dato og måned. Så får man jo poster der måske ligger år tilbage. Se min bemærkning Kl 10:01:10.
Avatar billede dennisa Nybegynder
15. april 2008 - 15:22 #14
Mugs > enig i din observation :-)
Avatar billede jensen363 Forsker
15. april 2008 - 15:30 #15
dennisa > jeg er heller ikke uenig med Mugs, det virker ikke helt gennemtænkt, men der ligger en løsning i mit forslag
Avatar billede torotune Nybegynder
16. april 2008 - 08:12 #16
Hmm.. Er lidt forvirret, det behøver ikke være vildt præcist, bare ca. 30 dage frem fra dags. Men forestille sig at vi skulle tjekke i en fødselsdagskalender om der var en der havde fødselsdag inden for de næste 30 dage, så ville en enkelt med føss d. 29. februar desværre aldrig optræde..
Avatar billede mugs Novice
16. april 2008 - 08:28 #17
Hvis du bruger et datofelt og måler på date() + 30 burde ALLE med fødselsdag indenfor dette tidsrum medtages også selvom det er skudår.
Avatar billede torotune Nybegynder
16. april 2008 - 13:25 #18
mugs-> Ok så holder jeg mig til den, jeg kan bare ikke helt få det til at virke endnu med de to DatePart.
Jeg er ikke sikker på hvor jeg skal skal sætte det rundt om i sætningen:

SELECT MinTabel.MinDato
FROM MinTabel
WHERE (((MinTabel.MinDato) Between Date() And Date()+30));
Avatar billede mugs Novice
16. april 2008 - 13:42 #19
Når du har en DatePart, er det jo kun et tal og ikke en dato. Din Select sætning bør fungere, og også medtage 29 FEB. Gør den ikke det?
Avatar billede torotune Nybegynder
16. april 2008 - 13:56 #20
Jeg ved det ikke endnu, for jeg kan ikke helt få den til at virke, den siger jeg har en syntaksfejl når jeg putter DatePart("d";Date();1;0) og DatePart("m";Date();1;0) ind i ovenstående sætning..
Avatar billede jensen363 Forsker
16. april 2008 - 14:09 #21
Det som Mugs forsøger at sige er, at du ikke umiddelbart kan benytte DatePart("d";Date();1;0) og DatePart("m";Date();1;0) i din Between sætning, fordi DatePart omsættes til en heltalsværdi, som ikke har sammenhæng med den heltalsværdi som er omtalt tidligere (15/04-2008 09:41:38).

Derfor skal du benytte denne :

SELECT MinTabel.MinDato
FROM MinTabel
WHERE (((MinTabel.MinDato) Between Date() And Date()+30));

som der allerede er ... det andet kan ikke lade sig gøre
Avatar billede mugs Novice
16. april 2008 - 14:30 #22
Hvad er formålet med at benytte DatePart? Hvis vi ved det, kan vi måske strikke en løsning sammen.
Avatar billede torotune Nybegynder
17. april 2008 - 13:38 #23
Det jeg gerne vil er, at jeg har pesoner oprettet min database i [MinTabel], alle oprettet med fødselsdato - eks. '02-12-1965' -  i kolonnen [Fodselsdag].

Det jeg så vil kunne, er at lave en forespørgsel der giver resultater på om der er nogen der har fødselsdag inden for de næste 30 dage.

Jeg ved ikke om man skal bruge DatePart, jeg er ikke bekendt med funktionen :-)
Avatar billede jensen363 Forsker
17. april 2008 - 14:47 #24
Quick´n´dirty

SELECT Format([MinDato],"dd/mm") AS Fødselsdag
FROM MinTabel
WHERE (((Format([MinDato],"dd/mm")) In (Format(Date(),"dd/mm"),Format(Date()+1,"dd/mm"),Format(Date()+2,"dd/mm"),Format(Date()+3,"dd/mm"),Format(Date()+4,"dd/mm"))));
Avatar billede jensen363 Forsker
17. april 2008 - 14:47 #25
Tæller dags dato og 4 dage frem
Avatar billede torotune Nybegynder
17. april 2008 - 14:59 #26
Okay - det virker! Lidt beskidt ja, for jeg skal vel op og lave en +5+6+7+8+9 ......... +30 ? =)
Avatar billede mugs Novice
17. april 2008 - 15:29 #27
SELECT Format([fødselsdag],"dd/mm") AS Fødselsdag1
FROM Tabel1
WHERE (((Format([fødselsdag],"dd/mm")) In (Format(Date(),"dd/mm"),Format(Date()+[Indtast antal dage],"dd/mm"))));
Avatar billede jensen363 Forsker
17. april 2008 - 15:29 #28
Ja, men det er vel til at klare :-)
Avatar billede torotune Nybegynder
21. april 2008 - 08:43 #29
Det er det vel! Jeg siger tak for svarene og diskussionen omkring det.. :-)
Avatar billede jensen363 Forsker
21. april 2008 - 08:49 #30
Velbekommen C",)
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