Camille Greselle
Camille Greselle

Reputation: 41

MySQL Query to get age from date of birth

I have an issue with my query,

SELECT id, pseudo, nom, prenom, sexe, ville, 
       FLOOR(DATEDIFF (NOW(), date_naissance)/365) AS mAge 
FROM user 
WHERE sexe = 'Homme' AND mAge BETWEEN 18 AND 25 OR ville = 'Bordeaux'

It is supposed to return the matching user with the where condition. The problem is the following, mAge is not existing I get the following error :

1054 - Unknown column 'mAge' in 'where clause'

Looks like my alias is not working properly on the where condition.

If I remove the mAge WHERE CLAUSE, I successfully get the mAge alias.

I need you guys

Thanks in advance !

Upvotes: 2

Views: 10349

Answers (2)

Artur Kedzior
Artur Kedzior

Reputation: 4273

I use this query to get age of the user (years and months)

SELECT 
username
,date_of_birth
,(PERIOD_DIFF( DATE_FORMAT(CURDATE(), '%Y%m') , DATE_FORMAT(date_of_birth, '%Y%m') )) DIV 12 AS years
,(PERIOD_DIFF( DATE_FORMAT(CURDATE(), '%Y%m') , DATE_FORMAT(date_of_birth, '%Y%m') )) MOD 12 AS months
FROM users

Result as of today:

chucknorris, 1979-04-10 00:00:00, 35, 2

Upvotes: 1

flurdy
flurdy

Reputation: 3972

You can not use column aliases in WHERE clauses: http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html.

You will have to rethink your query or change to:

SELECT id, pseudo, nom, prenom, sexe, ville, 
   FLOOR(DATEDIFF (NOW(), date_naissance)/365) AS mAge 
FROM user 
WHERE sexe = 'Homme' AND 
FLOOR(DATEDIFF (NOW(), date_naissance)/365) BETWEEN 18 AND 25 
OR ville = 'Bordeaux'

Ps you may also want to have a look at your ANDs and ORs as well as you might want to include some brackets.

Upvotes: 6

Related Questions