Avatar billede tblaster Nybegynder
30. oktober 2003 - 13:16 Der er 16 kommentarer og
1 løsning

Tid og dato i sql

Hejsa

Jeg har et stort problem med de latterlige tider og datoer i min sql. Med følgende sql henter jeg alle mine poster ud:

Sql2 = "SELECT BR.BookingRessourceID, BR.Antal From BookingRessource as BR, Booking as B Where BR.BookingID = B.BookingID and BR.RessourceID = " & db_RessourceID

Nu vil jeg så gerne kun hente dem ud hvor det gælder at:
dato = 31-10-2003
strtid = 08:00

Men det har jeg en del problemer med. Hvis jeg laver følgende sql:

Sql2 = "SELECT BR.BookingRessourceID, BR.Antal From BookingRessource as BR, Booking as B Where BR.BookingID = B.BookingID and BR.RessourceID = " & db_RessourceID & " and B.StartDato = '" & dato & "' Or B.SlutDato = '" & dato & "' or (B.StartDato < '" & dato & "' and B.SlutDato > '" & dato & "') and B.StartTid = '" & strtid & "' Or B.SlutTid = '" & strtid & "' or (B.StartTid < '" & strtid & "' and B.SlutTid > '" & strtid & "')"

Så bliver alle mine værdier hentet ud 4 gange hvor den jo egentligt kun skulle hente 2 poster ud. Min dato- og tids-felt ligger i en ms sql database og er af typen datetime med en længde på 8.

Hvad er det jeg laver forkert i min dato og tid? Plz help!
Avatar billede cool_casper Nybegynder
30. oktober 2003 - 13:39 #1
Du skal vistnok have "#" omkring dato-format i stedenfor "'"!
Det er lidt svært at overskue til query! ;) Prøv engang at udskrive den og post...
Avatar billede mortenkjeldberg Nybegynder
30. oktober 2003 - 13:50 #2
Sql2 = "SELECT BR.BookingRessourceID, BR.Antal
        FROM BookingRessource as BR, Booking as B
        WHERE BR.BookingID = B.BookingID
        AND BR.RessourceID = " & db_RessourceID & "
        AND ((B.StartDato = '" & dato & "' & AND B.StartTid = '" & strtid & "') OR
            (B.SlutDato = '" & dato & "' & AND B.SlutTid = '" & strtid & "'))"

Prøv og se om det ændrer noget...

/morten
Avatar billede tblaster Nybegynder
30. oktober 2003 - 13:50 #3
# er til access ' er til ms sql

SELECT BR.BookingRessourceID, BR.Antal From BookingRessource as BR, Booking as B Where BR.BookingID = B.BookingID and BR.RessourceID = 7 and B.StartDato = '31-10-2003' Or B.SlutDato = '31-10-2003' or (B.StartDato < '31-10-2003' and B.SlutDato > '31-10-2003') and B.StartTid = '08:00' Or B.SlutTid = '08:00' or (B.StartTid < '08:00' and B.SlutTid > '08:00')
Avatar billede tblaster Nybegynder
30. oktober 2003 - 13:56 #4
det gør ingen forskel
Avatar billede mortenkjeldberg Nybegynder
30. oktober 2003 - 14:00 #5
Hmm har du en løkke rundt omkring kaldet?
Avatar billede tblaster Nybegynder
30. oktober 2003 - 14:02 #6
yep
Avatar billede mortenkjeldberg Nybegynder
30. oktober 2003 - 14:04 #7
DEt kunne evt. være den gider du ikke sende det kode der lægger op til løkken og løkken?
Avatar billede mortenkjeldberg Nybegynder
30. oktober 2003 - 14:07 #8
Du kunne evt. lave en Response.Write lige inden query-kaldet og se hvor mange gange den kommer ud!
Avatar billede tblaster Nybegynder
30. oktober 2003 - 14:09 #9
For y = 1 to Session("RessourceAntal")
            Ressource = Split(Session("Ressource-" & y & ""), "#")
            If Cint(db_RessourceID) = Cint(Ressource(0))  Then
                If db_Antal > 1 Then
                    Sql2 =
                    Set rs2 = conn.execute(sql2)
                    Do while not rs2.EOF
                        Bla
                        rs2.movenext
                    Loop
                    End If
                End If
            End If
        Next
Avatar billede mortenkjeldberg Nybegynder
30. oktober 2003 - 14:23 #10
Prøv evt. at skrive Session("RessourceAntal") ud.

Nu ved jeg ikke om dette er copy'et direkte fra din kode, men der er en "End If" for meget.
Avatar billede tblaster Nybegynder
30. oktober 2003 - 14:28 #11
Det er ikke direkte copy ... min session("RessourceAntal") giver 3 hvis jeg udskriver den.

Jeg tror måske vi skal hente værdierne ud og så checke i koden. Jeg kan jo hente alle tider og datoer ud:

                        StartDato             = rs2("StartDato")
                        SlutDato            = rs2("SlutDato")
                        StartTid            = rs2("StartTid")
                        SlutTid                = rs2("SlutTid")

Men så skal jeg have lidt hjælp til at lave en datediff. Følgende virker fint:
If DateDiff("s", "01-01-1950", StartDato) =  DateDiff("s", "01-01-1950", dato) Or DateDiff("s", "01-01-1950", SlutDato) = DateDiff("s", "01-01-1950", dato) or (DateDiff("s", "01-01-1950", StartDato) < DateDiff("s", "01-01-1950", dato) and DateDiff("s", "01-01-1950", SlutDato) > DateDiff("s", "01-01-1950", dato) ) Then

Men hvordan får jeg den til at checke med dato og tid så den altså checker en startdato der hedder: StartDato & "-" & StartTid eller hvordan det nu skal udskrives i en datediff.
Avatar billede mortenkjeldberg Nybegynder
30. oktober 2003 - 14:40 #12
Der er en ting jeg ikke forstår:
Hvis du vil have en specifik dato ud, hvorfor så alt det her større end og mindre end?
Avatar billede tblaster Nybegynder
30. oktober 2003 - 14:44 #13
Det er fordi jeg bøvler alt for meget med at få den specifikke dato ud vha sql ...
Avatar billede tblaster Nybegynder
30. oktober 2003 - 14:46 #14
Kan det laves med sql så vil jeg meget heller benytte det ...
Avatar billede mortenkjeldberg Nybegynder
30. oktober 2003 - 15:03 #15
Og både slutDato og Startdato kan opfylde dette?
Avatar billede tblaster Nybegynder
30. oktober 2003 - 15:09 #16
Nu har jeg fået det til at virke ved at hente det ud og checke i koden. Jeg vil meget gerne have hvis der er en der kan komme med det samme til min sql så jeg kun henter det ud som jeg skal bruge!

                    Sql2 = "SELECT BR.BookingRessourceID, BR.Antal, BR.RessourceID, B.StartDato, B.SlutDato, B.StartTid, B.SlutTid From BookingRessource as BR, Booking as B Where BR.BookingID = B.BookingID and BR.RessourceID = " & db_RessourceID
                    Set rs2 = conn.execute(sql2)
                   
                    Do while not rs2.EOF
                        StartDato             = rs2("StartDato")
                        SlutDato            = rs2("SlutDato")
                        StartTid            = rs2("StartTid")
                        SlutTid                = rs2("SlutTid")
                       
                        If Len(strtid) = 5 Then
                            strtid                = strtid & ":00"
                        End If
                       
                        If rs2("RessourceID") = db_RessourceID Then
                            If DateDiff("s", "01-01-1950 00:00:00", StartDato & " " & StartTid) =  DateDiff("s", "01-01-1950 00:00:00", dato & " " & strtid) Or DateDiff("s", "01-01-1950 00:00:00", SlutDato & " " & SlutTid) = DateDiff("s", "01-01-1950 00:00:00", dato & " " & strtid) or (DateDiff("s", "01-01-1950 00:00:00", StartDato & " " & StartTid) < DateDiff("s", "01-01-1950 00:00:00", dato & " " & strtid) and DateDiff("s", "01-01-1950 00:00:00", SlutDato & " " & SlutTid) > DateDiff("s", "01-01-1950 00:00:00", dato & " " & strtid) ) Then
                                Antal = CInt(Antal) + CInt(rs2("Antal"))
                            End If
                        End if
                        rs2.movenext
                    Loop
Avatar billede netro Nybegynder
30. oktober 2003 - 15:56 #17
Du skal ikke bruge dansk datoformat i SQL-sætninger. Brug enten:

dato = 2003-10-31

Eller:

dato = 10-31-2003
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