Avatar billede oasen Nybegynder
29. december 2002 - 18:09 Der er 8 kommentarer og
2 løsninger

Udtræk brugere efter alder

Hvordan henter jeg nemmest alle personer, der er minimum 23 år og maksimum 36 år?

Jeg kunne selvfølgelig skrive:

Select Brugernavn From Tabel Where DatePart('yyyy', Foedselsdato) <= " & Year(Date) - 23 & " And DatePart('yyyy', Foedselsdato) >= " & Year(Date) - 36

Men den er nødt til også at tage hensyn til fødselsdagen og fødselsmåneden...
Avatar billede hossein Nybegynder
29. december 2002 - 18:32 #1
Du kan bruge noget i den retning, her henter jeg værdierne fra en tekstboks og formatere den:

Fodseldato=Cdate(mid(request("textbox"),3,2)&"-"&mid(request("textbox"),5,2)&"-"&left(request("textbox"),2))
age=datediff("yyyy",date(),Fodseldato)
Hvis du vil udregne alderen efter dage så prøv med dd istedet for yyyy.
Avatar billede oasen Nybegynder
29. december 2002 - 18:44 #2
Jeg kan sagtens finde ud af at udregne alderen med VB. Men som jeg skriver, skal de trækkes ud via SQL.
Avatar billede hossein Nybegynder
29. december 2002 - 19:28 #3
Det bliver lidt problomatisk uden brug af funktioner:
SELECT Tabel1.fodsel, datediff("d",fodsel,date()) AS minfodsel
FROM Tabel1;

if 8395 < minfodsel < 13140 then
response.write...
Avatar billede oasen Nybegynder
29. december 2002 - 20:12 #4
Ja, men det er overkill at trække 1000 poster ud og løbe dem igennem, hvis der kun er 90, der opfylder kriteriet...
Avatar billede hossein Nybegynder
29. december 2002 - 21:02 #5
OK, udfra denne forspørgsel:
SELECT Tabel1.fodsel, datediff("d",fodsel,date()) AS minfodsel
FROM Tabel1;

lav en anden forspørgsel og sæt dine kriteriere i den og kald (brug) den:

SELECT Forespørgsel1.fodsel, Forespørgsel1.Udtryk1
FROM Forespørgsel1 where Forespørgsel1.Udtryk1 between 8395 and 13140 ;
Avatar billede oasen Nybegynder
29. december 2002 - 22:03 #6
Som et build-in-query eller som union? Kan du udybe lidt?
Avatar billede hossein Nybegynder
30. december 2002 - 19:56 #7
Her har jeg lagt det hele i en query:

SELECT Tabel1.fodsel, DateDiff("d",fodsel,Date()) as min, iif(8395<min or min>13140,"rigtig","false") as RigtigFodsel
FROM Tabel1;

Alle personer som har en alder mellem 8395 og 13140 (faktisk 8394 og 13139 da vi bruger < >) får en værdi "Rigtig" i feltet RigtigFodsel, så skal du bare vælge dem.
Avatar billede oasen Nybegynder
30. december 2002 - 20:12 #8
Jeg fatter ikke, hvor du vil hen med værdierne 8395 og 13140...!?

Men det er ligemeget. Løsningen var meget simpel - jeg havde bare glemt havelågerne omkring udtrykket.

Ellers tak :)
Avatar billede hossein Nybegynder
30. december 2002 - 20:32 #9
jeg regnede alderen efter dage hvis man er 23 så er man 8395 dage gammel osv. da du sagde: >>Men den er nødt til også at tage hensyn til fødselsdagen og fødselsmåneden...

Og hvor du har glemt havelågerne?
Avatar billede oasen Nybegynder
31. december 2002 - 02:26 #10
Nåhh, på den måde...

Select Brugernavn From Tabel Where Foedselsdato <= #" & DateAdd("yyyy", -23, Date) & "# And Foedselsdato >= #" & DateAdd("yyyy", -36, Date) & "#"

Så fungerer det - godt nytår :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester