2

i am using a query where i need to select the rows from users where age between (multiple ages)

like i have 3 users in table users with 3 fields :

ID | NAME | DOB

1 | A | 12-06-1980
2 | B | 12-06-1970
3 | C | 12-06-1990
4 | D | 12-06-1995
5 | E | 12-06-1985

now if i want the list of users under 25 the out put

NAME | DATE OF BIRTH

C | 12-06-1990
D | 12-06-1995

What the query whould be for this any idea ?

SELECT * FROM users WHERE DOB 

? ANY IDEA

4

4 に答える 4

10

これを試して ::

SELECT * FROM users WHERE DATEDIFF(CURDATE(), DOB)/365<25 

年齢を年で取得するには:

SELECT 
FLOOR(tempUsers.t/365) as `years`
tempUsers.t%365 as `months`
from
(
 SELECT DATEDIFF(CURDATE(), DOB) t FROM users 
) tempUsers
于 2012-12-12T08:42:37.757 に答える
2

次のように実行できます。

SELECT * FROM users WHERE DOB >= (CURDATE() - INTERVAL 25 YEAR)

上記のクエリでdateofbirth日付フィールドから 25 を計算するには、次のようにします。

SELECT * FROM users 
WHERE DOB >= (CURDATE() - INTERVAL FLOOR(DATEDIFF(CURDATE(),dateofbirth)/365) YEAR)
于 2012-12-12T08:45:24.967 に答える
2
select *
from users
where DOB >= ADDDATE(CURRENT_DATE(), INTERVAL -25 YEAR);
于 2012-12-12T08:43:32.750 に答える
0

私はこれを使用します:

select id, name, dob,
  date_format(curdate(), '%Y') - date_format(dob, '%Y') - 
  (date_format(curdate(), '00-%m-%d') < date_format(dob, '00-%m-%d')) as age
from users

365 で割るよりも正確です。これは間違っている 2001 を与えます:

SELECT floor(DATEDIFF('4012-12-12', '2012-12-12')/365)

これは正しい2000を与えます:

select
  date_format('4012-12-12', '%Y') - date_format('2012-12-12', '%Y') - 
  (date_format('4012-12-12', '00-%m-%d') < date_format('2012-12-12', '00-%m-%d'))

ただし、年齢だけを計算する必要がある場合は、両方のソリューションが機能するはずです。

于 2012-12-12T09:44:41.557 に答える