[SQL] Datum uit datum/tijd-veld

Pagina: 1
Acties:
  • 1.608 views sinds 30-01-2008
  • Reageer

  • Blacksnak
  • Registratie: Oktober 2001
  • Laatst online: 07-07-2024
Zoals ik eerder vandaag al in topic gezegd heb ben ik bezig met logsysteem op m'n website.

Het loggen gaat perfect.

Nu ben ik met de gelogde gegevens overzichtjes aan het maken maar stuit op het volgende probleem:

Om te beginnen het m'n tabel volgende velden:

* ID (autonummering)
* URL ( hier wordt pagina gelogd)
* IP (ip-adres van bezoeker gelogd)
* Datum (datum & tijd gelogd)

Het probleem doet zich nu voor met het datum-veld. Daar zit dus datum & tijd in opgeslagen. Nu wil ik een lijstje uit database trekken die me de verschillende bezoekers (ip) per dag geeft. Geen probleem dacht ik, doe ik gewoon ff met deze query:

code:
1
SELECT URL, Datum FROM tblLog GROUP BY Datum, URL


Maar omdat ook de tijd aanwezig is in dat veld grouped die dus ook op tijd.

Der even m'n handboek bijgenomen en kwam ik de functie CONVERT_DATE() tegen, die enkel de datum eruit neemt. Ikke die even toegevoegd maar nu blijkt dat de SQL van Access (is op een Access 2000 database) deze functie gewoon niet kent.

Na wat speurwerk in de msdn-library van Microsoft ben ik tot de conclusie gekomen dat er zo geen functie aanwezig is. Hoe krijg ik in godsnaam dan die gegevens uit mijn tabel? (met SQL wel te verstaan. Ik zou natuurlijk dit ook nog kunnen opvangen in m'n ASP-code maar dat is niet echt netjes, zou het liever rechtstreeks met SQL doen.) Het splitsen van het veld in 2 velden (nl. datum & tijd) is echt de laatste mogelijkheid want dit geeft dan weer moeilijkheden op andere gebieden, dus kwil het 1ne veld liefst houden.

Heb ik het nu mis en bestaat er wel degelijk zo'n functie of is dit op een andere manier op te lossen?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

er is vast een date_format/extract of een dergelijke functie...
maar ik weet dat niet uit mijn hoofd, in elke database waar ik mee gewerkt heb was het er in ieder geval, mar access zit niet bij dat rijtje :)

  • djluc
  • Registratie: Oktober 2002
  • Nu online
ff logisch gedacht: de gegevens die je wilt ophalen hebben dezelfde datum:
code:
1
SELECT URL, Datum FROM tblLog WHERE DATE(datum)=DATE(NOW())

ik ga er overigens wel vanuit dat je de tijd en datum in je db hebt gezet met bijv:
code:
1
INSERT INTO tblLog (datum) VALUES (NOW())


Lees nu net nog eens je openingspost over en zie ineens iets wat niet echt correct is, lees helemaal niet! Een ip-adres mag je niet als iets unieks zien waar je een gebruiker aan kunt herkennen, dit kan alleen met php_session_id. Dit komt doordat veel mensen dymaische ip's hebben, en iemand anders dus ook jouw vorige ip kan krijgen. Verder is het misschien niet betere om een aparte tabel hits en een aparte tabel bezoekers, waar je die sess_id in zet?

[ Voor 45% gewijzigd door djluc op 23-12-2002 18:32 ]


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

djluc schreef op 23 December 2002 @ 18:29:
Lees nu net nog eens je openingspost over en zie ineens iets wat niet echt correct is, lees helemaal niet! Een ip-adres mag je niet als iets unieks zien waar je een gebruiker aan kunt herkennen, dit kan alleen met php_session_id. Dit komt doordat veel mensen dymaische ip's hebben, en iemand anders dus ook jouw vorige ip kan krijgen. Verder is het misschien niet betere om een aparte tabel hits en een aparte tabel bezoekers, waar je die sess_id in zet?

Waar heb jij het over :?
Denk je niet dat als ie in een openingspost de woorden "Access", "MSDN", "MSSQL" "website" noemt de kans groter is dat ie ASP gebruikt?

Denk je niet dat voor bezoekersregistratie het niet altijd interessant is of ze wel of geen sessieid hadden en of het wel of niet dezelfde gebruiker was als de vorige dag?

  • Blacksnak
  • Registratie: Oktober 2001
  • Laatst online: 07-07-2024
Idd ACM, het gaat echt om de verschillende bezoekers per dag. Het wijzigen van het IP-adres de volgende dag heeft geen (of heel weinig) invloed op mijn metingen.

DJLuc, ik denk dat je me verkeerd begrijpt. Ik wil namelijk een lijst generen met de bezoeken per dag:

ff voorbeeld:

*03-12-2002:
---ip-adres1
---ip-adres2
* 04-12-2002:
---ip-adres1
---ip-adres2
---ip-adres3

Met jou methode haal ik enkel de bezoeken van die dag op. Niet echt wat ik moet hebben.

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

SQL:
1
2
3
SELECT URL, Datum
FROM tblLog
WHERE Month(Datum)=12 And Day(Datum)=23 And Year([Datum)=2002


Is het enige wat ik kan bedenken in Access

  • Blacksnak
  • Registratie: Oktober 2001
  • Laatst online: 07-07-2024
Maar dan zit ik met een vaste waarde (= voor 1 dag). Ik wil een lijst genereren van alle dagen met per dag de IP-adressen (of het aantal unieke IP-adressen)

  • jochemd
  • Registratie: November 2000
  • Laatst online: 29-12-2025
code:
1
2
3
SELECT     URL, Count(IP)
FROM       tblLog
GROUP BY   Month(Datum), Day(Datum), Year(Datum), URL

  • Matthijs Hoekstra
  • Registratie: Januari 2001
  • Laatst online: 27-05 08:43
Huh? Ip adres is echt niet uniek. Een bedrijf met 1000 man zit met zijn allen achter 1 ip adres of proxy. Zou de sessie id als uniek opslaan (icm met ip voor extra info of rapportage)

  • robjanssen
  • Registratie: September 2001
  • Laatst online: 17-11-2025

robjanssen

Software Developer

code:
1
2
3
SELECT Month(Datum), Day(Datum), Year(Datum), IP
FROM Log
GROUP BY Month(Datum), Day(Datum), Year(Datum), IP

  • Blacksnak
  • Registratie: Oktober 2001
  • Laatst online: 07-07-2024
Thx Robjanssen, die doet het !

BigM321, ik weet dat het IP-adres in dat geval niet uniek is maar in mijn geval (metingen moeten niet 100% correct zijn) is dat voldoende.

  • sandergar
  • Registratie: Juni 2002
  • Laatst online: 17:13
Voor een conversie van datum/tijd naar datum kan je het volgende gebruiken in je query:

SELECT convert( datetime, CONVERT( char(10), < Jouw datum/tijd >, 120 ) ) .....

2.730 Wp Enphase Zuid 30°, 4.450 Wp Enphase Noord 30° | Smart EVSE laadpaal | Victron Multiplus II 48/5000/70 3 Fase | 45kWh PylonTech Pelio accu


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 17-11-2025

robjanssen

Software Developer

Dan wordt ie dus zo:

code:
1
2
3
SELECT CONVERT(DATETIME, CONVERT(CHAR(10), Datum, 120)), IP
FROM Log
GROUP BY CONVERT(DATETIME, CONVERT(CHAR(10), Datum, 120)), IP

  • Blacksnak
  • Registratie: Oktober 2001
  • Laatst online: 07-07-2024
code:
1
Microsoft][ODBC Microsoft Access Driver] Undefined function 'convert' in expression


Die kent hij dus ook niet. Kvraag me echt af onder welke naam Microsoft die functie nu toch weer verstopt heeft... ipv gewoon de gebruikelijke naamgeving over te nemen...

  • Crazy D
  • Registratie: Augustus 2000
  • Nu online

Crazy D

I think we should take a look.

Format of FormatDateTime.. in Access kun je "gewoon" VBA code in je query gebruiken (ja voor de |:( is heel wat te zeggen :P).

[edit]Format of Format$ dus, Format$(datumveld, "dd-mm-yyyy")

[ Voor 25% gewijzigd door Crazy D op 26-12-2002 12:49 ]

Exact expert nodig?


  • sandergar
  • Registratie: Juni 2002
  • Laatst online: 17:13
Sorry, vergat even dat het ging om Access. Ben zelf overgestapt van Access tabellen naar MSDE tabellen.

Dezelfde query maar dan met Access:

code:
1
2
3
SELECT Format([Datum],"dd/mm/yyyy") AS myDatum
FROM Log
GROUP BY Format([Datum],"dd/mm/yyyy");

2.730 Wp Enphase Zuid 30°, 4.450 Wp Enphase Noord 30° | Smart EVSE laadpaal | Victron Multiplus II 48/5000/70 3 Fase | 45kWh PylonTech Pelio accu


  • Blacksnak
  • Registratie: Oktober 2001
  • Laatst online: 07-07-2024
Dit doet ie niet hoor. Kwil wel nog even duidelijk maken dat ik in ASP bezig ben op een Access 2000 database.

En in de SELECT-tak van de sql kan ik toch geen asp gebruiken dacht ik? (toch niet in de trend van Format(Datum, "dd/mm/yyyy"). Of heb ik het mis?

  • jochemd
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Blacksnak schreef op 26 december 2002 @ 12:09:
code:
1
Microsoft][ODBC Microsoft Access Driver] Undefined function 'convert' in expression


Die kent hij dus ook niet. Kvraag me echt af onder welke naam Microsoft die functie nu toch weer verstopt heeft... ipv gewoon de gebruikelijke naamgeving over te nemen...
Hoezo, "gebruikelijke naamgeving"? Volgens de SQL standaard is CONVERT bedoeld om iets van de ene charset in de andere te vertalen. Ik weet niet welke brakke implementatie er een soortemet van datatype conversie van heeft gemaakt, maar die brakke implementatie is behoorlijk fout bezig.
Standaard zou zijn (helpt niet, want Access is al even brak, maar voor het voorbeeld):
CAST(field AS DATE)

  • sandergar
  • Registratie: Juni 2002
  • Laatst online: 17:13
Voor ASP moet je de dubbele quotes vervangen voor enkele en dan werkt het wel hoor! Heb even snel een demo script gemaakt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<HTML>
<HEAD>
</HEAD>

<BODY>
<%
    Dim mySQL
    Dim myConn
    Dim myRs

    Set myConn=Server.CreateObject("ADODB.Connection")
    myConn.Provider="Microsoft.Jet.OLEDB.4.0"
    myConn.Open("d:\inetpub\wwwroot\datum.mdb")
    Set myRS = Server.CreateObject("ADODB.recordset")

    myRS.CursorLocation = 3
    myRS.CursorType = 3
    myRS.LockType = 4

    mySQL = "SELECT Format([Datum],'dd/mm/yyyy') AS myDatum FROM Datum GROUP BY Format([Datum],'dd/mm/yyyy')"

    myRS.Open mySQL, myConn
    myRS.MoveFirst

    Do Until myRS.EOF
        Response.Write(myRS(0) & "<BR>")
        myRS.MoveNext
    Loop


    myRS.Close
    myConn.Close
    Set myRS = Nothing
    Set myConn = Nothing
%>    
</BODY>
</HTML>

[ Voor 12% gewijzigd door sandergar op 26-12-2002 15:49 . Reden: Slordigheid ]

2.730 Wp Enphase Zuid 30°, 4.450 Wp Enphase Noord 30° | Smart EVSE laadpaal | Victron Multiplus II 48/5000/70 3 Fase | 45kWh PylonTech Pelio accu


  • Blacksnak
  • Registratie: Oktober 2001
  • Laatst online: 07-07-2024
Voor ASP moet je de dubbele quotes vervangen voor enkele
Zover was ik zelf ook al hoor ;-)

Stond nog ergens anders foutje in m'n query. Is opgelost nu en werkt als een zonnetje.

Bedankt Sandergar, deze oplossing is een stuk netter dan die ik eerst had van Rob.

edit:

ps Sandergar, de movenext-opdracht ontbreekt in je oplossing :-) (kan miss nuttig zijn voor toekomstige searchs

[ Voor 20% gewijzigd door Blacksnak op 26-12-2002 15:44 ]


  • Crazy D
  • Registratie: Augustus 2000
  • Nu online

Crazy D

I think we should take a look.

Blacksnak schreef op 26 december 2002 @ 13:53:
En in de SELECT-tak van de sql kan ik toch geen asp gebruiken dacht ik? (toch niet in de trend van Format(Datum, "dd/mm/yyyy"). Of heb ik het mis?
Welkom in de wondere wereld van Access :) VBA/VBscript kan (gedeeltelijk) gebruikt worden in een query....

Exact expert nodig?


  • Blacksnak
  • Registratie: Oktober 2001
  • Laatst online: 07-07-2024
Welkom in de wondere wereld van Access VBA/VBscript ...
Ben al aardig thuis in deze wondere wereld hoor :-) Maar wist niet dat het ook in SELECT-tak kon. Alleen nog maar gebruikt in WHERE-tak en dergelijke...

Maarja, al doende leert men hé :)
Pagina: 1