Avatar billede scheegell Novice
09. september 2020 - 15:26 Der er 16 kommentarer og
1 løsning

Sortering i datoformat

Har en tabel med indmeldelses datoer i datoformat (05-01-1994) og jeg vil gerne i en forespørgsel kunne udvælge dem, der har f.eks. har 10 eller 20 års jubilæum i det kommende år.
Avatar billede Gustav Ekspert
09. september 2020 - 15:56 #1
Du kan fx bruge DateDiff:

Where DateDiff("yyyy", [Indmeldelsesdato]), Date()) In (9, 19)
Avatar billede scheegell Novice
09. september 2020 - 16:18 #2
Skal parameter så ændres hvert år?
Havde håbet på en løsning, hvor det ikke var nødvendigt at ændre på formlen, men at den selv fandt ud af, hvem der havde 10 eller 20 års jubilæum i henholdsvis 2021 eller 2022.
Avatar billede Gustav Ekspert
09. september 2020 - 16:29 #3
Du spurgte kun om "det kommende år". Det er i år 2021.
Først til næste år vil det være 2022.
Avatar billede scheegell Novice
09. september 2020 - 16:38 #4
Jo.; men det er ikke mig, der skal lave listerne i fremtiden, derfor må jeg have en løsning, der er "langtidsholdbar" på den måde, at kassereren i foreningen blot hvert år i januar kan køre forespørgselen og derved få en udskrift af, hvem der i det år har runde dage.
Håber dette giver mening.
Avatar billede bsn Forsker
09. september 2020 - 16:57 #5
10 eller 20 års jubilæum i det kommende år:

WHERE (((Year([Indmeldelsesdato]))=Year(Date())-10)) OR (((Year([Indmeldelsesdato]))=Year(Date())-20));
Avatar billede kurt54 Ekspert
09. september 2020 - 17:01 #6
hvis man vil fremtidssikre så søg også efter 30 og 40 år - måske også 25.
Avatar billede Gustav Ekspert
09. september 2020 - 17:15 #7
> Håber dette giver mening.

Ikke rigtigt, for nu spørger du om "januar dette år". Det er/var pt. januar 2020. Det er ikke det kommende år, som er 2021, hvilket du oprindeligt spurgte om.

Og du spurgte om det "kommende" år. Derfor bruger udtrykket Date(), som jo ændres dag for dag, så når kassereren kommer til 2021, vil den vise jubilæerne i 2022.

Når du nu siger "januar indeværende år", er det jo for sent for dem, der måtte være tilmeldt i januar. Så mener du "senest december" eller skal den i januar vise dem, der har jubilæum fra og med februar og til og med januar det kommende år?
Avatar billede scheegell Novice
09. september 2020 - 17:20 #8
Når jeg sætter strengen ind under Kriterier i Foresprøgselen så skriver den:
Det indtastede udtryk indeholder ugyldig syntaks, eller datateksten skal omsluttes af anførselstegn.
Hvor skal jeg ellers sætte strengen ind?
Avatar billede scheegell Novice
09. september 2020 - 17:25 #9
Korrekt - formuleringen er forkert.
Det er meningen, at kassereren sidst på året kører forespørgselen således, at jubilarerne listes for det kommende år, og det kan sagtens blive både 25 og 30 år.
Avatar billede Gustav Ekspert
09. september 2020 - 17:31 #10
Det nemmeste er at skifte til SQL view og tilføje direkte til koden.
Eller oprette en ny forespørgsel, skift til SQL, og brug denne SQL:

Select * From DinTabel
Where DateDiff("yyyy", [Indmeldelsesdato]), Date()) In (9, 19)

Hvis den skal vise for indeværende år:

Select * From DinTabel
Where DateDiff("yyyy", [Indmeldelsesdato]), Date()) In (10, 20)

DinTabel og feltnavnet skal naturligvis justeres til dine navne.

I GUI'en kan du oprette et nyt felt:

    Jubilæum: DateDiff("yyyy";[Indmeldelsesdato]);Date())

med kriteriet:

    In (10;20)
Avatar billede Gustav Ekspert
09. september 2020 - 17:38 #11
> det kan sagtens blive både 25 og 30 år.

Så er det nemmeste nok at trimme den til at filtrere på de faktiske jubilæer ved at lægge én (+1) til, fx:

DateDiff("yyyy", [Indmeldelsesdato]), Date())+1 In (10, 20, 25, 30, 35, 40)
Avatar billede scheegell Novice
09. september 2020 - 18:01 #12
Når jeg sætter strengen ind i Kriterier i forespørgselen får jeg atter en meddelelse om, at
Det indtastede udtryk indeholder ugyldig syntaks.
Der mangler en operand eller operator
Avatar billede scheegell Novice
09. september 2020 - 18:42 #13
Opgiver.
Kender ikke SQL og mangler information om, hvor tekstkoden skal indsættes.
Avatar billede Gustav Ekspert
09. september 2020 - 19:29 #14
Hvis man bare opgiver, kommer man aldrig i mål.

Opret en ny forespørgsel, luk vinduet "Vis tabel" og klik på SQL øverst til venstre.

I vinduet står der:

SELECT;

Slet dette og indsæt (der var en parentes for meget før, beklager):

Select DinTabel.* From DinTabel
Where DateDiff("yyyy", [Indmeldelsesdato], Date())+1 In (10, 20, 25, 30, 35, 40)

Ret DinTabel og Indmeldelsesdato til dine aktuelle tabel- og feltnavne.

Klik oppe til venstre på Vis og vælg Designvisning.

Hvis alt ser rigtigt ud, så klik Vis oppe til venstre.
Avatar billede falster Ekspert
09. september 2020 - 21:02 #15
Ja der er ingen grund til at give op.

Gustavs udmærkede forslag er blot skrevet i den kode, som du også selv danner i den grafiske forespørgselsdesigner.

Opret et felt i forsørselsdesign, hvor  i "Felt:" - altså øverst indsættes:

DateDiff("yyyy", [Indmeldelsesdato], Date())+1 In (10, 20, 25, 30, 35, 40)

I "Kriterier" indsættes:

In (10, 20, 25, 30, 35, 40)
Avatar billede falster Ekspert
09. september 2020 - 21:06 #16
Rettelse:

Ja der er ingen grund til at give op.

Gustavs udmærkede forslag er blot skrevet i den kode, som du også selv danner i den grafiske forespørgselsdesigner.

Opret et felt i forsørselsdesign, hvor i "Felt:" - altså øverst indsættes:

DateDiff("yyyy"; [Indmeldelsesdato]; Date())+1

I "Kriterier" indsættes:

In (10; 20; 25; 30; 35; 40)
Avatar billede scheegell Novice
11. september 2020 - 12:23 #17
Tak for indput:

Jeg havde mistet modet, men en peptalk hjalp.
Jeg har anvendt Gustavs formel, men med falsters løsning.
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