[MS Access 2003 & SQL] specifiek datumbereik selecteren

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

  • Black Hawk
  • Registratie: Oktober 2003
  • Laatst online: 21-05 15:09
Ha mensen,

Na veel gezocht te hebben ben ik er nog niet uit. Wat wil ik: ik wil een datumbereik selecteren.
Even voor de duidelijkheid: ik gebruik MS Access 2003 en wil een SQL query maken.

Ik heb de volgende tabel
code:
1
2
3
4
| naam  |  adres  | geboortedatum |
|=================================|
| Jan X | haven 2 | 13-05-1979    |
| Jan Y | stoep 9 | 01-12-1985    |

dit is een voorbeeld, en hij zit natuurlijk helemaal vol.

Nu wil ik weten hoeveel mensen er ouder dan 18 jaar zijn.
Dit heb ik geprobeerd met de volgende query:
SQL:
1
2
3
SELECT Count(naam) AS aantal_mensen
FROM tabel
WHERE Geboortedatum > (Date()-DatePart("y",28));

Maar ik krijg een verkeerde uitkomst. Ook wat geprul met year() en month() etc schoot niet op. Nu mijn vraag: wie kan mij de gouden tip geven voor de oplossing van mijn probleem?

Wie nooit tijd heeft, kan er niet mee omgaan.


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Kijk eens naar datediff

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • Black Hawk
  • Registratie: Oktober 2003
  • Laatst online: 21-05 15:09
Ok, thnx. Ik ben er even mee aan het stoeien geweest, maar ik krijg nog steeds een verkeerde uitkomst
De query is nu:
SQL:
1
2
3
SELECT Count(naam) AS aantal_mensen
FROM tabel
WHERE DateDiff('yyyy',date(),geboortedatum) > 18


Maar ik vraag me af of de twee datumtypen hetzelfde zijn.
Geeft date() dezelfde format als geboortedatum (die de format dd-mm-yyyy is)?

Edit: het antwoord is nee. Maar nu mijn volgende vraag: hoe kan ik een van beide data omzetten, zodat ik dezelfde typen met elkaar ga vergelijken?

[ Voor 16% gewijzigd door Black Hawk op 15-01-2007 22:32 ]

Wie nooit tijd heeft, kan er niet mee omgaan.


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Is geboortedatum wel een datumveld dan?
Overigens is datediff niet voldoende. Datediff houdt namelijk geen rekening met de datum binnen het jaar. Uibreiden met maand/dag controle of een verschil van een dag voor lief nemen en verschil uitrekenen in dagen. :)

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • Black Hawk
  • Registratie: Oktober 2003
  • Laatst online: 21-05 15:09
niesje schreef op maandag 15 januari 2007 @ 23:45:
Is geboortedatum wel een datumveld dan?
Ja, van het type Datum/Tijd en de notatiewijze is Korte datumnotatie (dd-mm-yyyy)
En de functie date() geeft de datum terug in de notatie (mm-dd-yyyy).

Ik denk dus dat het probleem opgelost is door de data uit het veld geboortedatum in de query om te zetten naar de notatie van date(). Maar hoe doe ik dat, want ik kan er geen standaard functie voor vinden?
niesje schreef op maandag 15 januari 2007 @ 23:45:
Overigens is datediff niet voldoende. Datediff houdt namelijk geen rekening met de datum binnen het jaar. Uibreiden met maand/dag controle of een verschil van een dag voor lief nemen en verschil uitrekenen in dagen. :)
Ik begrijp wat je bedoelt, maar heb je een alternatief, of weet je hoe ik dat zelf kan realiseren. Is het bijv. mogelijk om zelf een VB functie te schrijven en die aan te roepen vanuit SQL?

Wie nooit tijd heeft, kan er niet mee omgaan.


  • Pyrowired
  • Registratie: Februari 2004
  • Laatst online: 05-01-2025
Je kan in VB met de functie split e.e.a. recht zetten

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public function PF_Zet_datum_goed(Dwaarde)

dim omzetting

if Not IsDate(Dwaarde) then
echo msgbox("geef weel een datum op!","titel", VBokOnly + VBCritical)
exit function
end if

omzetting = split(Dwaarde, "-",-1,1)

PF_Zet_datum_goed = omzetting(1) & "-" & omzetting(0) & "-" & omzetting(2)

end function


Eventueel nog aangevuld met een CDate() her en der.

Zolang de zon schijnt, blijf ik binnen.

Pagina: 1