Toon posts:

[ASP/SQL]Gedeelte van een datum selecteren met LIKE

Pagina: 1
Acties:
  • 275 views sinds 30-01-2008

Verwijderd

Topicstarter
Hallo allemaal,

Wat ik al geprobeerd heb:
Ik heb al wat diverse dingen geprobeerd met like, ook al gekeken op sites zoals SQLKeyData en W3CSchools maar ik kom er niet echt uit.

De situatie is als volgt:
Ik heb hier een tabel, met IP adressen en datums (veld type van beide is text) erin.
Een voorbeeld van een datum entry is: 25-04-06

Wat ik graag wil:
Ik zou graag willen dat alle IP adressen te zien zijn op de site die in bijv April 2006 de site bezocht hebben (Dus niet een specifieke dag, maar van heel de maand April)
De query:
code:
1
SELECT * FROM Statistieken WHERE Datum LIKE


In de bovenste code heb ik ook al met %04% en %04 en 04% zitten spelen, maar ik kom er echt niet uit, iemand die hier toevallig het antwoord op weet?

  • Phenomenon
  • Registratie: December 2000
  • Laatst online: 22-02 21:27
Misschien met 'Month'?

WHERE MONTH(datum) = 4 ?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 22-02 00:22

Janoz

Moderator Devschuur®

!litemod

Als je datum gewoon in een date opslaat kun je keurig de verschillende date en time functies gebruiken. Daarnaast is dat ook een stuk efficienter dan je huidige systeem.

@hierboven: Dat kan niet omdat hij foute datatypen gebruikt.

[ Voor 16% gewijzigd door Janoz op 25-04-2006 10:48 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Het gaat fout met het datatype van je DATUM kolom. Indien nog mogelijk wijzig dit asjeblieft in DATE, misschien heb je voor deze query nog een workaround. Volgende week is er een andere query waar je weer iets voor moet verzinnen omdat het niet echt een datumtype is.

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
Note: was ik er nog even vergeten bij te melden, de database is gemaakt in Access.

Het probleem is dat ik ook een calendar gebruik, hiemee een datum selecteer, welke de datum met een GET/QueryString naar een andere pagina stuurt.

Het probleem is dat als ik dan het veldtype op Datum/Tijd en dan een WHERE gebruik om een unieke datum op te vragen voor de statistieken per dag dan een data mismatch error krijg:

[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.

[ Voor 10% gewijzigd door Verwijderd op 25-04-2006 10:55 ]


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Hoe geef je de datum door aan de query waarbij je een type mismatch krijgt? Je moet bij access nl. # om de datum plaatsen.

WHERE Datumveld = #01-01-2006#

Je doet er beter aan dat probleem op te lossen, in plaats van het datatype op tekst te zetten, en nog veel meer problemen te introduceren.

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
P_de_B schreef op dinsdag 25 april 2006 @ 10:56:
Hoe geef je de datum door aan de query waarbij je een type mismatch krijgt? Je moet bij access nl. # om de datum plaatsen.

WHERE Datumveld = #01-01-2006#

Je doet er beter aan dat probleem op te lossen, in plaats van het datatype op tekst te zetten, en nog veel meer problemen te introduceren.
De huidige query is:

code:
1
2
sql = "SELECT * FROM Statistieken WHERE Datum = '"& datum &"'"
set RS2 = Conn.Execute(sql)


Hiermee geeft hij dus die error, en de variable datum is een Request.Querystring("datum")

[ Voor 9% gewijzigd door Verwijderd op 25-04-2006 11:00 ]


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
En dat is dus niet goed, je moet # in plaats van ' gebruiken.

Edit: en als je inderdaad Request.QueryString("Datum") doet moet je ook even [google=sql injection]

[ Voor 48% gewijzigd door P_de_B op 25-04-2006 11:01 ]

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
P_de_B schreef op dinsdag 25 april 2006 @ 11:00:
En dat is dus niet goed, je moet # in plaats van ' gebruiken.

Edit: en als je inderdaad Request.QueryString("Datum") doet moet je ook even [google=sql injection]
Oke, bedankt voor de info en de tip :), dat probleem is opgelost, ik ga nu de pagina maken met het de maand selectie, en laat nog wel even weten of het gelukt is.

BTW: SQL Injection, maak ik me in dit geval niet zo druk over want er moet namelijk eerst ingelogd worden op de pagina voordat de gegevens worden weergegeven ofdat de QueryString uitgevoerd wordt, dus de enige die de gegevens kunnen zien, zijn admins, mensen die ik vertrouw dus ;)

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Euh..

code:
1
where mydatefield like '__-04-__'


En mocht je geen voorloopnullen gebruiken:
code:
1
where mydatefield like '__-%4-__'



De underscore is een single-character placeholder (in tegenstelling tot %, welke 0 of meerdere tekens matched). Ik weet niet zo snel of Access de [..] wildcard notatie ook ondersteunt, in dat geval kun je zelfs nog specifieker naar cijfers zoeken:
code:
1
where mydatefield like '[0-9][0-9]-%4-[0-9][0-9]'



Maar los daarvan, en ik heb het al zo vaak gezegd: Mensen; gebruik ISO notatie, werkt altijd:
20060425 -> 25 April 2006. Simple as that.

En dan wil ik het idd. nog niet eens hebben over het "misuse" van je datatypen en SQL injection enzovoorts (ook al zijn het alleen maar "admins", what the hell heeft dat er mee te maken?).

En tot slot: Waarom sla je in godsnaam jaartallen nog in 2 cijfers op? Heb je niks geleerd van het milennium probleem? (Ja, dat was een beetje anders). In 3000 komen we weer in de knoei door mensen als jij ;)

[ Voor 100% gewijzigd door RobIII op 25-04-2006 11:23 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
Oke, bedankt allemaal, jullie tips werken allemaal :).
Nu nog een klein vraagje, hoe breek ik uit een loop, ik heb hier namelijk een loop die ik in een loop moet uitvoeren, omdat de tabel er anders namelijk niet goed uit komt te zien, maar als je een loop in een loop doet, werkt hij dus niet, en doet hij een infinite loop, ik heb al geprobeerd met RS.Break, en RS.Continue, en Break (RS) en Continue(RS) maar niets werkt :(

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Al eens gehoord van voorwaardelijke loops :? While... Do...Loop Until... Enzovoorts?
http://www.w3schools.com/vbscript/vbscript_looping.asp

Dit is wel héél erg basic...

[ Voor 22% gewijzigd door RobIII op 25-04-2006 12:11 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
RobIII schreef op dinsdag 25 april 2006 @ 12:09:
Al eens gehoord van voorwaardelijke loops :? While... Do...Loop Until... Enzovoorts?
http://www.w3schools.com/vbscript/vbscript_looping.asp

Dit is wel héél erg basic...
Oke, ja sorry, domme mij.

Nog een laatste vraag: Ik probeer nu een Query uit te voeren waar de Maand en het Jaar vast staan. Maar de Dag staat niet vast, deze moet hij pakken, van het huidige record waar hij is in de loop. Hoe doe ik dit?

De huidige SQL code:
code:
1
sql2 = "SELECT DISTINCT(IP) FROM Statistieken WHERE MONTH(Datum) = '"& maand &"' AND YEAR(Datum) = '"& jaar &"' AND DAY(Datum) = '???'"


Note: Bij de vraagtekens weet ik niet wat er ingevuld moet worden, google geeft helaas ook geen antwoord.

[ Voor 7% gewijzigd door Verwijderd op 25-04-2006 12:22 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op dinsdag 25 april 2006 @ 12:21:
[...]


Oke, ja sorry, domme mij.

Nog een laatste vraag: Ik probeer nu een Query uit te voeren waar de Maand en het Jaar vast staan. Maar de Dag staat niet vast, deze moet hij pakken, van het huidige record waar hij is in de loop. Hoe doe ik dit?

De huidige SQL code:
code:
1
sql2 = "SELECT DISTINCT(IP) FROM Statistieken WHERE MONTH(Datum) = '"& maand &"' AND YEAR(Datum) = '"& jaar &"' AND DAY(Datum) = '???'"


Note: Bij de vraagtekens weet ik niet wat er ingevuld moet worden, google geeft helaas ook geen antwoord.
Google heeft niet overal een pasklaar antwoord op. Programmeren is zélf denken en doen. Er is geen "de" code om iets te doen.
code:
1
sql2 = "SELECT DISTINCT(IP) FROM Statistieken WHERE MONTH(Datum) = '"& maand &"' AND YEAR(Datum) = '"& jaar &"' AND DAY(Datum) = '" & HuidigeRS.fields("MyDayNumberField").Value & "'"


En wederom best basic...

[ Voor 27% gewijzigd door RobIII op 25-04-2006 12:25 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Rob, die singe quotes moeten niet om de dagwaarde. DAY(datumveldje) retourneert een INT afaik

Oops! Google Chrome could not find www.rijks%20museum.nl


  • whoami
  • Registratie: December 2000
  • Laatst online: 18:08
Je moet gewoon niet filteren op de dag dan he....
Gewoon filteren op jaar en maand, en dan krijg je alle datums die binnen dat jaar en die maand vallen.
Als je een bepaalde dag wilt, dan heb je die 'dag' wel in een variable staan, dus dan kan je die gebruiken.

Verder moet je ook geen quotes gebruiken rond numerieke waarden; aangezien Month en Year een numerieke waarde opleveren, moet je dus niet met een string gaan vergelijken.

Best basic allemaal.... Een beetje denken, en af en toe eens iets opzoeken in de MSDN helpt je zeker al vooruit.

[ Voor 12% gewijzigd door whoami op 25-04-2006 12:27 ]

https://fgheysels.github.io/

Pagina: 1

Dit topic is gesloten.