15. juli 2003 - 09:35Der er
17 kommentarer og 3 løsninger
Dato i BETWEEN er forkert
Hejsa ... Jeg har en asp-side hvorfra jeg skal hente oplysninger fra en given dato + 4 dage tilbage. Det skal lige siges at det er et kald til Oracledatabase Mit kald ser således ud:
MaxD = CDate(Request("dato")) MinD = MaxD - 4 strSQL = "Select TEXT, TIMESTAMP, EVENT, STATIONID, IDLETIME, PRODTIME FROM SIDETID WHERE (TEXT LIKE '%" & request("avis") strSQL = strSQL & "%' OR upper(TEXT) LIKE '%" & Request("avis") strSQL = strSQL & "%') and to_char(timestamp,'DD-MM-YYYY') BETWEEN '" strSQL = strSQL & CStr(MinD) & "' and '" & CStr(MaxD) & "' order by TEXT, Timestamp"
Mit problem er at den henter dagen fint - altså dagen inkl. 4 dage, men måneden er helt gal - Der viser den alle måneder.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Den skriver stadig ud på rigtige dage, men alle måneder tilbage response.write er Select TEXT, TIMESTAMP, EVENT, STATIONID, IDLETIME, PRODTIME FROM SIDETID WHERE (TEXT LIKE '%S1V%' OR upper(TEXT) LIKE '%S1V%') and to_char(timestamp,'DD-MM-YYYY') BETWEEN '07-07-2003' and '11-07-2003' order by TEXT, Timestamp
function SQLDate(dato) dim tmpDato tmpDato = left(dato,10) SQLDate = right(tmpDato,4) & mid(tmpDato,4,2) & left(tmpDato,2) end function
MaxD = SQLDate(Request("dato")) MinD = dateadd("d",-4,Request("dato")) MinD = SQLDate(MinD)
strSQL = "Select TEXT, TIMESTAMP, EVENT, STATIONID, IDLETIME, PRODTIME FROM SIDETID WHERE (TEXT LIKE '%" & request("avis") strSQL = strSQL & "%' OR upper(TEXT) LIKE '%" & Request("avis") strSQL = strSQL & "%') and to_char(timestamp,'DD-MM-YYYY') BETWEEN '" strSQL = strSQL & minD & "' and '" & MaxD & "' order by TEXT, Timestamp"
Den gik desværre ikke: Select TEXT, TIMESTAMP, EVENT, STATIONID, IDLETIME, PRODTIME FROM SIDETID WHERE (TEXT LIKE '%S1V%' OR upper(TEXT) LIKE '%S1V%') and to_char(timestamp,'DD-MM-YYYY') BETWEEN '20030707' and '20030711' order by TEXT, Timestamp Så får jeg ingen respons ... for i db'en står det som dd-mm-yyyy
hvorfor skal jeg egnelig ? - den første response.write er jo korrekt! Problemet er blot at der tages for mange linier fra databasen.. BETWEEN '07-07-2003' and '11-07-2003' giver stadig svar fra eks. 6, 5 og fjerde måned
Jeg ved ikke hvordan Oracle læser datoerne. Jeg er stadig overbevist om at formattet er forkert. Det kan også være to_char(timestamp,'DD-MM-YYYY') der har forkert format.
I stedet for at konvertere dit timestamp fra Oracle til en tekststreng, så gør det omvendte, og lad Oracle klare arbejdet for dig. En anden ting, så lad være med at bruge din OR betingelse, da den intet giver performancemæssigt.
Select TEXT, TIMESTAMP, EVENT, STATIONID, IDLETIME, PRODTIME FROM SIDETID WHERE upper(TEXT) LIKE '%S1V%' and timestamp BETWEEN TO_DATE('07-07-2003', 'dd-mm-yyyy') and TO_DATE('11-07-2003', dd-mm-yyyy') order by TEXT, Timestamp
Du kan alternativt bruge Oracle's egen dato, så det hedder BETWEEN SYSDATE AND SYSDATE -4
Vær dog opmærksom på, at der indgår tidspunkt i SYSDATE (prøv SELECT SYSDATE FROM DUAL for at se formatet). Du kan cast'e en variabel så mange gange du vil, så skal du kun bruge datoen kan du gøre følgende: TO_DATE(TO_CHAR(SYSDATE, 'dd-mm-yyyy'), 'dd-mm-yyyy')
OK - det fattede jeg minus af :) -- Jeg er ikke så god til dato-beregninger og slet ikke til Oracle .. ovenstående kode er faktisk genbrug/hjælp herfra ... Kan du evt. omskrive det i den rigtige kode: MaxD = CDate(Request("dato")) MinD = MaxD - 4 strSQL = "Select TEXT, TIMESTAMP, EVENT, STATIONID, IDLETIME, PRODTIME FROM SIDETID WHERE (TEXT LIKE '%" & request("avis") strSQL = strSQL & "%' OR upper(TEXT) LIKE '%" & Request("avis") strSQL = strSQL & "%') and to_char(timestamp,'DD-MM-YYYY') BETWEEN '" strSQL = strSQL & CStr(MinD) & "' and '" & CStr(MaxD) & "' order by TEXT, Timestamp"
IF request("avis") = "alle" then strSQL = "Select TEXT, TIMESTAMP, EVENT, STATIONID, IDLETIME, PRODTIME FROM SIDETID WHERE TEXT LIKE '%" & "_" & "%'" strSQL = strSQL & " and (to_char(timestamp,'dd-mm-yyyy') Like '%" & MaxD & "'" strSQL = strSQL & " or to_char(timestamp,'dd-mm-yyyy') Like '%" & Min1 & "'" strSQL = strSQL & " or to_char(timestamp,'dd-mm-yyyy') Like '%" & Min2 & "'" strSQL = strSQL & " or to_char(timestamp,'dd-mm-yyyy') Like '%" & Min3 & "') order by Timestamp"
dingdong .. og så den rigtige kodestump, jeg baskede med : strSQL = "Select TEXT, TIMESTAMP, EVENT, STATIONID, IDLETIME, PRODTIME FROM SIDETID WHERE (TEXT LIKE '%" & request("avis") strSQL = strSQL & "%' OR upper(TEXT) LIKE '%" & Request("avis") & "')" strSQL = strSQL & " and (to_char(timestamp,'dd-mm-yyyy') Like '%" & MaxD & "'" strSQL = strSQL & " or to_char(timestamp,'dd-mm-yyyy') Like '%" & Min1 & "'" strSQL = strSQL & " or to_char(timestamp,'dd-mm-yyyy') Like '%" & Min2 & "'" strSQL = strSQL & " or to_char(timestamp,'dd-mm-yyyy') Like '%" & Min3 & "') order by Timestamp"
Synes godt om
Ny brugerNybegynder
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.