SQL zoeken op een datum m.b.v. Where

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

  • blijhoofd_bennie
  • Registratie: Maart 2000
  • Niet online

blijhoofd_bennie

Wasser für alle!!

Topicstarter
Kan een hele simpele vraag zijn (maar kom hem niet echt vinden in de search)

Maar ik zit met het volgende (simpele) probleem

Ik wil gewoon een zoekactie doen die als volgt gaat:
SELECT * FROM Tabel
WHERE DATUM = 20-05-2002

Het datum veld is van het type datetime.
Heb ook al eens een hele veld ingevuld, maar dan kwam SQl met een foutmelding.
Als ik alleen de datum geeft ie niets weer.
Het is me wel gelukt op delen van een datum te zoeken, dus alleen op de maand,dag etc.

Maar uiteindelijk is het in mijn Delphi programma de bedoeling dat als ik dus in type 05 alle velden waard de waarde 05 in voorkomt weergeven (dat had ik al wel met datepart)
Maar ook als ik 23-05 ingeef dat er dan wat weer gegeven wordt. En dat geeft dus problemen.

Iemand een idee?

  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 06-12 09:14
Wat dacht je van "-jes om de datum?

Hmm sorry, misschien iets te voorbarig.. Misschien is LIKE wat voor jou? SELECT * FROM tabel WHERE datum LIKE "%23-5%"; Maar ook dan: met "-jes :)

  • blijhoofd_bennie
  • Registratie: Maart 2000
  • Niet online

blijhoofd_bennie

Wasser für alle!!

Topicstarter
Op donderdag 23 mei 2002 08:59 schreef elviver het volgende:
Wat dacht je van "-jes om de datum?

Hmm sorry, misschien iets te voorbarig.. Misschien is LIKE wat voor jou? SELECT * FROM tabel WHERE datum LIKE "%23-5%"; Maar ook dan: met "-jes :)
Dit had ik ook al geprobeerd, maar tevergeefs er wordt nog niets weergegven. Ik heb al wel vernomen dat als ik dus zeg van 2002-05-23 invoer dat SQL dat ziet als een aftreksom, dus dat ik nogmaals moet zeggen dat het een datetime veld is.

Had wel een resultaat met like, maar dan in combinatie met datepart, dus je kon dan zoeken op maand, jaar etc , alleen wanneer er dus een '-' bij de zoekactie wordt ingevoerd geeft die problemen.

Verwijderd

SELECT * FROM Tabel
WHERE DATUM
between to_date('20-05-2002 00:00:00','dd-mm-yyyy hh24:mi:ss')
and to_date('20-05-2002 23:59:59','dd-mm-yyyy hh24:mi:ss')

Dit voorbeeld werkt perfect in Oracle......

  • rik
  • Registratie: April 2000
  • Laatst online: 02-12 10:54

rik

Probeer er eens {} omheen te zetten; where date = {10-10-2002}?

En is je datumnotatie wel goed?

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Dit is in elke RDBMS anders, dus kun je die even vermelden?

Trouwens "" in een query lijkt me sterk, maak er dan maar '' van.

  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 06-12 09:14
Op donderdag 23 mei 2002 09:14 schreef Glimi het volgende:
Trouwens "" in een query lijkt me sterk, maak er dan maar '' van.
Hoezo?

Verwijderd

Het is eigenlijk niet zo heel moeilijk.
Stel je where clause als volgt op:

WHERE trunc(DATUM) = to_date('20-05-2002','dd-mm-yyyy')

GL

Verwijderd

met een trunc wordt een eventuele index op de datum niet meer gebruikt !

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Je zou evt. ook nog de maand, jaar en dag kunnen uitsplitsen
code:
1
2
3
4
5
6
7
8
9
10
SELECT
   ...
FROM
   ...
WHERE
   MONTH(datum)='05'
AND
   DAYOFMONTH(datum)='22'
AND
   YEAR(datum)='2002'

maar ook dit zal in elk dbms anders zijn.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Op donderdag 23 mei 2002 09:17 schreef elviver het volgende:

[..]

Hoezo?
Omdat SQL strings aangeeft met een single quote en reserved words met backticks. Een dubbele quote heb ik nog nooit gezien iig :?

[edit]Waarvoor gebruik je ze dan?

Verwijderd

Inderdaad voor de zekerheid de enkele quote's gebruiken. En, draai de dag en maand eens om.. Dus zo:

Select * from tabelnaam where datum='5-23-2002'

  • cannibal
  • Registratie: Maart 2001
  • Laatst online: 09:14
meestal gebruiken wij hier het volgende,
wat werkt voor sql-server 7 / 2000

select *
from tblData
where BeginDatum = 'yyyy/MM/dd'

dus

where BeginDatum = '2002/05/23'

je moet alleen opletten met feit dat er ook nog vaak uren, minuten en seconden in een datetime zitten, dus vooral bij groter of gelijk clauses moet je hier extra mee opletten en iets gebruiken als:

where BeginDatum <= 2002/05/23 23:59:59.999'

wat dus echt het einde van die dag geeft.

  • blijhoofd_bennie
  • Registratie: Maart 2000
  • Niet online

blijhoofd_bennie

Wasser für alle!!

Topicstarter
ff een korte samenvatting van wat jullie allemaal gepost hebben en ik getest heb.

Gepost, zoeken op delen van de maand dus where day = 23 etc
Had ik al getest en dit werkte ook, maar dan ging de zoekactie de mist in bij bijvoorbeel een - ertussen of /
dus 23-05-2002.

Heb ook al met ' ' geprobeerd, dus where datum = '20-05-2002' (in zowel de SQL notatie als de NL notatie)
Heb zelfs eens de tijd erachter gezet (dus knippen plakken veld), maar ja geeft ie nog niets weer.

Een hoger lager dan principe werkt ook wel (voor delen dan), maar dit heb kan ik niet gebruiken, omdat er geen definitieve begin of eind datum is (kan er wel vanuit gaan dat het waarden niet voor 2002 ingevuld kunnen zijn, maar dat is niet de bedoeling)

Eventuele notaties met where datum = 23/05/2002, geven geen resultaat, omdat sql dat als een sommetje zit (tenzij ik een variabele declareer, maar dan vind ie weer niets)

Maar heb al vernomen dat mijn zoekactie op alleen, dag maand, jaar etc al voldoende was. Dus bedankt voor jullie reactie's.
Alhoewel het vaag is dat het niet helemaal lekker werkt. Heb namelijk de oplossingen van jullie geknipt en geplakt voor het geval van, maar helaas werkten die ook niet :'(

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Welk DBMS hebben we het over??

da's wel handig, want dan kunnen desbetreffende guru's even wat gerichtere informatie geven ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • whoami
  • Registratie: December 2000
  • Laatst online: 07-12 23:28
DBMS = Database Management System

Welke database gebruik je dus, mocht je de term DBMS niet kennen.

https://fgheysels.github.io/


  • blijhoofd_bennie
  • Registratie: Maart 2000
  • Niet online

blijhoofd_bennie

Wasser für alle!!

Topicstarter
Op donderdag 23 mei 2002 10:39 schreef whoami het volgende:
DBMS = Database Management System

Welke database gebruik je dus, mocht je de term DBMS niet kennen.
hehe had al een idee wat het betekende :+

Maar ik werk met SQL 7.0

Verwijderd

Ik kan een datetime veld gewoon uitvragen op de volgende manier (SQL2000 en SQL7):
code:
1
2
3
SELECT *
FROM Tabel
WHERE (Datum = '04-16-2002')

Let op dat je eerst de maand, dan de dag en dan het jaar moet ingeven.

  • blijhoofd_bennie
  • Registratie: Maart 2000
  • Niet online

blijhoofd_bennie

Wasser für alle!!

Topicstarter
Op donderdag 23 mei 2002 11:10 schreef JeroenDega het volgende:
Ik kan een datetime veld gewoon uitvragen op de volgende manier (SQL2000 en SQL7):
code:
1
2
3
SELECT *
FROM Tabel
WHERE (Datum = '04-16-2002')

Let op dat je eerst de maand, dan de dag en dan het jaar moet ingeven.
Ik heb jou code geknipt en geplakt, en een correct datum ingevoerd, maar hij geeft niets weet

SELECT * FROM Emailadres
where (aangemaakt = '05-14-2002')
(ook nog wat andere datum notaties geprobeerd)

  • Againzender
  • Registratie: Maart 2002
  • Laatst online: 18-11 15:28
Is het niet zo dat hij er ook een tijd bij verwacht? En als hij dat niet krijgt er maar 00:00:0000 achter zet?
Je zoekt dus eigenlijk naar een specifiek tijdstip, en dus niet naar een dag.

  • blijhoofd_bennie
  • Registratie: Maart 2000
  • Niet online

blijhoofd_bennie

Wasser für alle!!

Topicstarter
Op donderdag 23 mei 2002 12:08 schreef Againzender het volgende:
Is het niet zo dat hij er ook een tijd bij verwacht? En als hij dat niet krijgt er maar 00:00:0000 achter zet?
Je zoekt dus eigenlijk naar een specifiek tijdstip, en dus niet naar een dag.
Dit klopt helemaal, maar ik wil dus alleen op het gehele datum gedeelte zoeken exclusief de tijd.
Kan dat eigenlijk wel in SQL (zonder datepart te gebruiken) vraag ik me dan af omdat je allleen maar het type datetime hebt smalldatetime

  • HansMij
  • Registratie: Mei 2002
  • Laatst online: 06-12 14:28
Probeer eens
code:
1
2
SELECT * FROM Tabel
WHERE DATUM = '#20/05/2002#'

Ik weet het niet zeker, maar ik geloof dat in Access die hekjes bij datums verplicht zijn.

Verwijderd

Volgens mij moet je eens terug gaan naar het punt dat je zei dat de database niks teruggaf en jezelf is achter je hoofd krabben of hij wel iets terug moet geven. m.a.w. staat er wel een record in je database die voldoet aan de datumvoorwaarde die net is gesteld.
Godspeed,
:Z-Force

  • blijhoofd_bennie
  • Registratie: Maart 2000
  • Niet online

blijhoofd_bennie

Wasser für alle!!

Topicstarter
Op donderdag 23 mei 2002 14:28 schreef Z-Force het volgende:
Volgens mij moet je eens terug gaan naar het punt dat je zei dat de database niks teruggaf en jezelf is achter je hoofd krabben of hij wel iets terug moet geven. m.a.w. staat er wel een record in je database die voldoet aan de datumvoorwaarde die net is gesteld.
Godspeed,
:Z-Force
Ik snap, maar hoe zou je ooit naar alleen een datum kunnen zoeken als je de tijd altijd in het veld erbij hebt staan? Dat is wel een beetje vaag
Ik hoop in ieder geval dat ze in de toekomst ook een date veld mogelijk maken, want werkt meer met een datum dan met een dag en aan een persoon.
Dan een dag aan een datum

Verwijderd

je hoeft de tijd er niet bij te zetten,
SELECT *
FROM Tabel
WHERE Tabel.Datum = '20-05-2002';

Zou gewoon moeten werken, wanneer dit niks teruggeeft, betekent dat er niets in je tabel staat met de datum 20 mei,
suc6,
:Z-Force

Verwijderd

Ga naar je Enterprise Manager, zoek je tabel op en klik met je rechtmuis op deze tabel en kies 'Open tabel', 'Return all rows...'. Ga vervolgens naar het knopje met de letters SQL er op en ga daar een beetje proberen.

Bijvoorbeeld:
code:
1
2
SELECT * FROM Emailadres
where (aangemaakt >= '05-13-2002' and aangemaakt <= '05-15-2002')

Controleer van tevoren wel even of er uberhaubt records in je tabel staan die voldoen aan je criterium.

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Op donderdag 23 mei 2002 14:53 schreef Z-Force het volgende:
je hoeft de tijd er niet bij te zetten,
SELECT *
FROM Tabel
WHERE Tabel.Datum = '20-05-2002';

Zou gewoon moeten werken, wanneer dit niks teruggeeft, betekent dat er niets in je tabel staat met de datum 20 mei,
suc6,
:Z-Force
Dat is afhankelijk per RDBMS hoor.

BTW
http://gathering.tweakers.net/forum/faq&id=3#02
Wij tweakers doen elkaar permanent de groeten. Het is dus niet nodig om steeds ruimteverspillende "greetz [user]" of iets dergelijks onder je post te plakken. Als je perse zoiets wilt kun je daar je signature voor gebruiken (zie latere uitleg).

  • kisanth
  • Registratie: September 2000
  • Laatst online: 15-04-2024
Als je ook op een gedeelte van een datum wilt zoeken, moet je de volgende construktie gebruiken:

WHERE (CONVERT(char(10), Datum, 105) LIKE '%<Zoekterm>%')

  • Againzender
  • Registratie: Maart 2002
  • Laatst online: 18-11 15:28
Kisanth: bedankt! Hier heb ik ook wat aan. Alleen moest ik even die 105 naar 101 zetten omdat het systeem hier op US-instellingen staat.
Dit moet blijhoofd_bennies hoofd nog blijer maken :)

  • blijhoofd_bennie
  • Registratie: Maart 2000
  • Niet online

blijhoofd_bennie

Wasser für alle!!

Topicstarter
Op donderdag 23 mei 2002 15:10 schreef kisanth het volgende:
Als je ook op een gedeelte van een datum wilt zoeken, moet je de volgende construktie gebruiken:

WHERE (CONVERT(char(10), Datum, 105) LIKE '%<Zoekterm>%')
(beetje laat :Z)
Zal het morgen direct ff proberen, kijken of mijn hoofd er vrolijker van wordt :+

Verwijderd

hmz je moet #-jes om je date heenzetten
dus

SELECT veld1,veld2
FROM Gebruikers
WHERE Gebruikers.datum > #03-08-1984#;

hier selecteert dus alle records waarvan de datum GROTER is dan MM-DD-JJJJ dus 3 maart 1984 de datumvolgorde verschilt per systeem (amerikaans , nederlands ...etc).
nog een valstrik bij datums > en < als een datum groter is dan 8 maart 1984 is dat dus NA deze datum een datum kleiner dan 8 maart 1984 is VOOR deze datum dus :
24-05-2002 > 08-03-1984
10-10-1000 < 08-03-1984

dit word nog wel es door elkaar gehaald :)

  • Againzender
  • Registratie: Maart 2002
  • Laatst online: 18-11 15:28
Die #'jes zijn niet nodig in transact-SQL. Volgens mij is dat iets typisch Access-achtigs.
De oplossing van Kisanth werkt gewoon bij mij, en daar ben ik blij mee, want ben pas net bezig met SQL2000. En als het bij mij werkt, waarom zou het dan niet bij naderen werke?

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 25-11 22:57

dusty

Celebrate Life!

Gewoon netjes de datum functies van je Database gebruiken. Is al vaker voorbij gekomen is al vaker gezegd.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR

Pagina: 1

Dit topic is gesloten.