webForumDet fria alternativet

Ålder

8 svar · 206 visningar · startad av Erik Juhlin

Erik JuhlinMedlem sedan maj 20007 625 inlägg
#1

Jag har en column i min medlemsdatabas som heter "dMemberBirthDate" där det finns födelsedatum inlagda i formatet 1982-08-23.
Skulle vilja göra så att man kan jämföra åldrar så att jag kan skriva WHERE Age <= 15 AND Age >= 25.

Går det att med SQL göra så att datumet omvandlas till året + att det inte blir problem med när man fyller år på året..?

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

@ndersMedlem sedan juni 200026 914 inlägg
#2

Nja, jag vet inte om du kan göra så i SQL, jag hade nog gett mig på att skapa datum till SQL-frågan, och kört en BETWEEN.

Förresten känns WHERE Age <= 15 AND Age >= 25 som ett villkor som kan vara svårt att uppfylla. ;)

Mvh,

------------------
All your base are belong to me.

LarsGMedlem sedan dec. 200012 465 inlägg
#3
select * from ogrish 
 where cast(datediff(day,dMemberBirthDate,current_timestamp)/365.24 as int) between 15 and 25

borde gå i sql-server.

Har du någon annan DBMS så går det nog att anpassa uttrycket.

------------------
essentitia preter non sans multiplicandum

Erik JuhlinMedlem sedan maj 20007 625 inlägg
#4

Jaja @nders, du är inte heller perfekt. Glömma FROM... Hmpf! :p

Tack LarsG, ska prova det! :)

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

Erik JuhlinMedlem sedan maj 20007 625 inlägg
#5

Varför kan man inte skriva så här?

SELECT *, CAST(DATEDIFF(DAY, dMemberBirthDate, CURRENT_TIMESTAMP)/365.24 AS INT) AS iMemberAge FROM tblMember WHERE iMemberAge BETWEEN 18 AND 20

Måste man skriva så här?

SELECT *, CAST(DATEDIFF(DAY, dMemberBirthDate, CURRENT_TIMESTAMP)/365.24 AS INT) AS iMemberAge FROM tblMember WHERE CAST(DATEDIFF(DAY, dMemberBirthDate, CURRENT_TIMESTAMP)/365.24 AS INT) BETWEEN 18 AND 20

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

LarsGMedlem sedan dec. 200012 465 inlägg
#6

Du kan skriva så här

select * from (
SELECT *, CAST(DATEDIFF(DAY, dMemberBirthDate, CURRENT_TIMESTAMP)/365.24 AS INT) AS iMemberAge FROM tblMember )
where iMemberAge between 15 and 25

------------------
essentitia preter non sans multiplicandum

Erik JuhlinMedlem sedan maj 20007 625 inlägg
#7

Jag får felet:

Server: Msg 156, Level 15, State 1, Line 3
Incorrect syntax near the keyword 'where'.

Ser lite mystik ut den där SQL:en...

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

LarsGMedlem sedan dec. 200012 465 inlägg
#8

Det är inget skumt med den resultatet av en select är ju en tabell.

Om du lägger på ett tabellalias då

select * from (
SELECT *, CAST(DATEDIFF(DAY, dMemberBirthDate, CURRENT_TIMESTAMP)/365.24 AS INT) AS iMemberAge FROM tblMember ) as t
 where iMemberAge between 15 and 25

------------------
essentitia preter non sans multiplicandum

Erik JuhlinMedlem sedan maj 20007 625 inlägg
#9

Funkar bra, tack LarsG! :)

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

Genererad på 377 ms · cache AV · v20260730165559-full.f96bc7eb