Avatar billede mskjoldp Novice
26. august 2005 - 09:10 Der er 9 kommentarer og
1 løsning

LIKE mod dato tidsgruppe

Hey E

Jeg vil gerne bruge WHERE ... LIKE '%%' ... op mod en dato tidsgruppe (DTG), og jeg skal finde ud af hvad jeg skal sætte ind mellem '%%'.

Jeg gemmer i en db en DGT i dette format: 260910Z AUG 05
som betyder: 26 (dato idag), 0910 (klokken), Z (sommertid), AUG (måned), 05 (år)

nu vil jeg så gerne søge efter DTG med LIKE, hvor DTG er inden for 12 timer af serveren dato og klokke.

Dvs noget ala:

WHERE ... LIKE '%mellem 26servertid-tolvtimerZ AUG 05 og 26servertidZ AUG 05%'

kan man søge således med LIKE, altså mellem to tider? eller hvordan skruer jeg den sammen.
Avatar billede mm12010 Nybegynder
26. august 2005 - 09:22 #1
måske er det BETWEEN du søger:
http://www.w3schools.com/sql/sql_between.asp
Avatar billede mskjoldp Novice
26. august 2005 - 09:41 #2
det er da en start
Avatar billede busschou Praktikant
26. august 2005 - 10:42 #3
ja between bør gøre det ala
"Where DGT Between DateAdd("h",-12,Now()) And DateAdd("h",12,Now())"
Men det kræver at DGT laves om til brugbart dato format, hvilket er muligt med omsonst
Der må gælde følgende
aar = split(DGT," ")(2)
maaned = split(DGT," ")(1)
dag = Left(DGT,2)
time = Mid(DGT,3,2)
minut = Mid(DGT,5,2)
ergo har man DGT i dato format ved først lave datoen
nyDato = DateSerial(aar,maaned,dag)
så lægge timer til
nyDato = DateAdd("h",time,nyDato)
så lægge minutter til
nyDato = DateAdd("n",time,nyDato)
----
Alt dette skal så stå istedet for DGT
Jeg undrer mig over dit valg af dato format, men du har måske en god grund?
Hvis du havde det som en normal dato i databasen ville det generelt lette søgninger :o)
Avatar billede busschou Praktikant
26. august 2005 - 10:46 #4
der er endda fejl i det jeg skriver da år og måned ikke dur på den måde
Med mindre du har en speciel grund til dit tidsformat, så ville jeg overveje at gemme det som en normal dato
Den eneste information en normal dato ikke indeholder er om det er sommer eller vinter tid
Avatar billede mskjoldp Novice
26. august 2005 - 13:20 #5
busschou, din kommentar ser brugbar ud. Jeg tester det af og vender tilbage...
Avatar billede mskjoldp Novice
26. august 2005 - 14:01 #6
Der er muligheder i ovenstående, men jeg får en fejl.

jeg tæller i db'en via en funktion. I denne funktion prøver jeg at koble busschou kode på:

Function aCount(strFrom, objConn, objrs)
        strSQL = "SELECT COUNT(*) AS Antal FROM " & strFrom
        Set objrs = objConn.Execute(strSQL)
        aCount = objrs("Antal")
        DTG = objrs("S_ETIC")' indeholder formatet(fx) "261000Z AUG 05"
        aar = split(DTG," ")(2)
        maaned = split(DTG," ")(1)
        dag = Left(DTG,2)
        time = Mid(DTG,3,2)
        minut = Mid(DTG,5,2)
        nyDato = DateSerial(aar,maaned,dag)
        nyDato = DateAdd("h",time,nyDato)
        nyDato = DateAdd("n",time,nyDato)
    End Function

Hvor jeg henter resultatet således ind i layoutet:

bla bla

    <td align="center"><%=aCount("fly_status WHERE S_ETIC BETWEEN DateAdd(''h'',-12,Now()) AND DateAdd(''h'',12,Now())", Conn, rs)%></td>

bla bla

Men det giver denne fejl:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'S_ETIC BETWEEN DateAdd(''h'',-12,Now()) AND DateAdd(''h'',12,Now())'.

Kobler jeg koden forkert sammen?
jeg har skiftet " ud med '' da " gav problemer...
jeg har også prøvet at indsætte: DTG = "261000Z AUG 05"
Avatar billede busschou Praktikant
26. august 2005 - 14:27 #7
da det er datoer skal der # omkring, det var min fejl :o/
Men du kan ikke gøre som du gør
Det jeg ville frem til var at du gør sådan her
---
"select * from tabel where DGT Between #DateAdd("h",-12,Now())# And #DateAdd("h",12,Now())#"
---
I det udtryk skal du erstatte DGT med den store smøre
jeg har tjekket at følgende giver dig en dato
---
dgt = "260910Z AUG 05"
aar = split(DGT," ")(2)
maaned = split(DGT," ")(1)
dag = Left(DGT,2)
timen = Mid(DGT,3,2)
minut = Mid(DGT,5,2)
nyDato = DateValue(maaned &" "& dag &","& aar)
nyDato = DateAdd("h",timen,nyDato)
nyDato = DateAdd("n",minut,nyDato)
response.write nyDato
---
Dvs totalt set skal du erstatte DGT med følgende
DateAdd("n",Mid(DGT,5,2),DateAdd("h",Mid(DGT,3,2),DateValue(split(DGT," ")(1) &" "& Left(DGT,2) &","& split(DGT," ")(2))))
---
Så du får følgende (i mine øjne lidt møg kode ;o) hehe i hvert fald uoverskuelig)
---
"select * from tabel where DateAdd("n",Mid(DGT,5,2),DateAdd("h",Mid(DGT,3,2),DateValue(split(DGT," ")(1) &" "& Left(DGT,2) &","& split(DGT," ")(2)))) Between #DateAdd("h",-12,Now())# And #DateAdd("h",12,Now())#"
---
Hvis du nu havde DGT i normalt dato format kunne du nøjes med der blot stod DGT :o)
Avatar billede mskjoldp Novice
26. september 2005 - 11:21 #8
Det ser interessant ud, jeg prøver....
Avatar billede mskjoldp Novice
10. januar 2006 - 15:38 #9
busschou svar plz
Avatar billede busschou Praktikant
18. januar 2006 - 23:40 #10
bedre sent end aldrig :o) nu er min mail endelig oppe og virke igen weee...
Så her er et svar :o))
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