Avatar billede kunop Nybegynder
25. maj 2005 - 15:03 Der er 5 kommentarer og
1 løsning

Sammenligning af datoer i SQL

Jeg skal have udtrukket de fem seneste og de fem kommende arrangementer fra en access-db. Problemet består i hvordan jeg sammenligner dato'er i min forespørgsel.

Jeg havde forestillet mig noget i denne stil:

SELECT top 5* FROM match where dato1=<"&date&" order by id

Men kan ikke helt få det til at virke... Nogen forslag?

dato1 er kortdatoformaet dvs. 14-04-2005
Avatar billede busschou Praktikant
25. maj 2005 - 15:16 #1
Hvis nu du bare vidste fra og til dato så kunne du bruge Between
Select * From tabel Where dato Between fra And til
Men hvis du ikke kender datoen og ønsker fem på den ene side af dags dato og fem på den anden side..så er du nød til at bruge to sql statements og union dem
sql1 = "Select top 5* From match Where dato1 <= #" &date& "# Order By dato1 Desc"
sql2 = "Select top 5* From match Where dato1 > #" &date& "# Order By dato1 Asc"
sql = sql1 &" Union "& sql2
conn.execute(sql)
Avatar billede fennec Nybegynder
25. maj 2005 - 15:18 #2
Du skal bruge formatet "mm-dd-yyyy" til access, selv om du ser et andet format. Den kan dog godt finde ud af at læse 14-04-2004 rigtig, da den ved at der ikke er 14 måneder, men 10-04-2005 opfattes som den 4. okt. Brug derfor altid mm-dd-yyyy formatet i access, så er der ikke problemer.

Du kan bruge denne funktion til at konvertere datoer:

Function ConvertToSqlDate(dato)
    dim SQLYear,SQLMonth,SQLDay
    SQLYear = Year(dato)
    SQLMonth = Month(dato)
    SQLDay = Day(dato)
    if SQLDay<10 then
        SQLDay = 0&SQLDay
    end if
    if SQLMonth<10 then
        SQLMonth = 0&SQLMonth
    end if
    ConvertToSqlDate = SQLMonth&"-"&SQLDay&"-"&SQLYear
End Function

Desuden skal der # omkring datoer i Access:

sql = "SELECT top 5* FROM match where dato1=< #"& ConvertToSqlDate(date) &"# order by id"
Avatar billede fennec Nybegynder
25. maj 2005 - 15:19 #3
.. også havde busschou også fanget =< fejlen. Det skal være <= eller virker det ikke :o)

ql = "SELECT top 5* FROM match where dato1<= #"& ConvertToSqlDate(date) &"# order by id"
Avatar billede kunop Nybegynder
25. maj 2005 - 16:03 #4
Umiddelbart lader det til at virke uden brug af convert funktionen, men jeg har endnu ikke gennemtestet det, så det er muligt at jeg kommer til at gøre brug af det alligevel.

Jeg havde ikke brug for union sætningen, da jeg kører de to forespørgsler seperat - altså på to forskellige sider. Den eneste lille ting var, at der skulle være et mellemrum mellem 5 og * heri "top 5*"

Men nu virker det så jeg ville sætte pris på oprettelsen af svar... ;-)
Avatar billede busschou Praktikant
25. maj 2005 - 16:09 #5
jamen så får du et svar :o)
anyway
=< burde ikke virke så mon ikke du også har ændret det til <= ?
Avatar billede fennec Nybegynder
25. maj 2005 - 16:12 #6
Jeg skal ikke have point.
.o) <-- One Eyed Jack
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