11. maj 2010 - 14:39Der er
9 kommentarer og 1 løsning
DateDiff forskellig format
Jeg har et databasefelt ved navn clipAfspilletSidst, hvor der er skrevet et Now timestamp ind som her: 11-01-2010 04:35:05
Og så vil jeg gerne lave en sql sætning der henter en record fra denne form for dato 8 dage tilbage fra dags dato.
Problemet er, at date() giver formatet: 2010-05-11
Jeg fandt en funktion til at sætte manglende nuller, og jeg konverterede sådan: Function pd(n, totalDigits) if totalDigits > len(n) then pd = String(totalDigits-len(n),"0") & n else pd = n end if End Function dateISO = YEAR(Date()) & "-" & Pd(Month(date()),2) & "-" & Pd(DAY(date()),2) response.Write dateISO
Det så rigtigt nok ud, indtil jeg puttede det ind i datadd og fik fejl her: response.Write DateAdd("d",dateISO,-8)
Så er det at jeg vi prøve at lave en udvælgelse: clipAfspilletSidst LIKE '%" & DateAdd("d",dateISO,-8)
Udfordringerne hober sig op i fødevare- og drikkevareindustrien og gør den til en af de mest sårbare.
24. oktober 2024
Slettet bruger
11. maj 2010 - 16:19#1
jeps... prøv denne her:
"select * from din_tabel where ((datediff('d',clipAfspilletSidst,#" & now() & "#)>8 or datediff('d',clipAfspilletSidst,#" & now() & "#)=8)"
Det kan godt være det skal være <8 i stedet for >8 det kan jeg ikke helt gemmenskue... Men denne her skulle gerne finde datoer, som er ældre end 8 dage eller lig med 8 dage...
Tak Dan Jeg har bikset noget opstilling sammen, der kører. Men det er faktisk data for den sidste uges mest populære, jeg skal hente. Så jeg har 8 linjer af kode plus en laaang sætning der henter datoerne ind.
Kan dit eksempel omskrives til at dække en uge?
Synes godt om
Slettet bruger
11. maj 2010 - 16:43#3
tjae... men der det så ikke nemmere med datepart i stedet? Noget á la det her:
sidste_uge = datepart("ww",(dateadd("d",now(),-7)), vbmonday, vbfirstfourDays) set rs = conn.execute("select * from din_tabel") do until rs.EOF=True clipAfspilletSidst=rs("clipAfspilletSidst") if datepart("ww",clipAfspilletSidst,vbmonday,vbfirstfourdays)=sidste_uge then 'du viser noget... end if rs.movenext loop rs.close set rs=nothing
Mit eget er det eneste der virker indtil nu, men det er meget uflexibelt:
Function pd(n, totalDigits) if totalDigits > len(n) then pd = String(totalDigits-len(n),"0") & n else pd = n end if End Function dateISO = YEAR(Date()) & "-" & Pd(Month(date()),2) & "-" & Pd(DAY(date()),2) 'response.Write dateISO 'response.Write DateAdd("d",-7,dateISO)
strSQL = strSQL & "AND (clipAfspilletSidst LIKE '%" & dateGenerated08 & "%' OR clipAfspilletSidst LIKE '%" & dateGenerated07 & "%' OR clipAfspilletSidst LIKE '%" & dateGenerated06 & "%' OR clipAfspilletSidst LIKE '%" & dateGenerated05 & "%' OR clipAfspilletSidst LIKE '%" & dateGenerated04 & "%' OR clipAfspilletSidst LIKE '%" & dateGenerated03 & "%' OR clipAfspilletSidst LIKE '%" & dateGenerated02 & "%' OR clipAfspilletSidst LIKE '%" & dateGenerated01 & "%' OR clipAfspilletSidst LIKE '%" & dateGenerated00 & "%') "
Synes godt om
Slettet bruger
11. maj 2010 - 22:31#5
nej! Du skal lave koden om... sidste_uge er ugenummeret på uge før nu! Altså uge 18 i denne uge.
Så laver du sql-udtrækket, uden nogle where-kriterier - og så laver du dit loop og henter clipAfspilletSidst=rs("clipAfspilletSidst")
og finder ugenummeret på den dato, nemlig: datepart("ww",clipAfspilletSidst,vbmonday,vbfirstfourdays)
Og så laver vi vores if-sætning, hvor vi sammenligher ugenummeret med sidste uge med ovenstående.
Sådan her: sidste_uge = datepart("ww",(dateadd("d",now(),-7)), vbmonday, vbfirstfourDays) set rs = conn.execute("select * from din_tabel") do until rs.EOF=True clipAfspilletSidst=rs("clipAfspilletSidst") if datepart("ww",clipAfspilletSidst,vbmonday,vbfirstfourdays)=sidste_uge then 'du viser noget... end if rs.movenext loop rs.close set rs=nothing
OK, tak igen. Jeg får nu uge 18, den forgangne uges klip vist. MEN jeg får alle vist. Vi mangler at sætte LIMIT 7, som jeg nu har slået fra i min sql sætning. Jeg har prøvet at tjekke min counter = counter +1. Men den har nogle høje numre. Har så forsøgt at nulsætte tælleren før den sættes ind i betingelsen, men uden held. Har du en ide? Send lige svar. Det er allerede guldet værd :)
PS: Har faktisk droppet at vise sidste uges mest sete. Det kan jo faktisk ikke lade sig gøre at detecte hvilke klip der er spillet mest i den sidste uge, kun hvilke der er afspillet. Feltet clipAfspilletSidst indeholder jo kun en dato. Selve tæller-felt i databasen bliver jo tilføjet et nummer når det bliver spillet, og så vises de klip der har størst antal visninger, og det kan jo være et gammelt klip som vil blive ved med at ligge øverst. Så skulle jeg oprette et nyt felt der hedder clipTaellerSidsteUge, og den skulle sættes til at optælles - men det er ret langhåret...
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.