SELECT *具有特定年龄的用户

时间:2012-10-30 20:47:55

标签: mysql sql

users表格中,我有一个名为dob的字段,以这种格式存储用户的出生日期:

1959-04-02

无论如何,我想选择所有18岁和19岁的用户。这是我的问题:

SELECT *
FROM `users`
WHERE dob BETWEEN '1993-10-30' AND '1994-10-30'

但它似乎只选择了大多数18岁的孩子和一些(但不是全部)19岁的孩子。我在数据库中有一堆测试用户,18和19岁的人数相等。然而,这个问题产生了大约90%的18岁儿童和大约10%的19岁儿童。为什么呢?

3 个答案:

答案 0 :(得分:4)

年龄在18至19岁之间的人包括2年以上的一系列出生日期。您的查询仅涵盖1年。考虑重新修改你的逻辑。

答案 1 :(得分:4)

我会建议像:

SELECT *
FROM `users`
WHERE dob BETWEEN 
    CURDATE() - INTERVAL 18 YEARS 
    AND CURDATE() - INTERVAL 20 YEARS 

从技术上讲,这将包括今天满20岁的人。您可以将interval更改为DATE_ADD,如果您愿意,可以更准确。

这有点清洁,因为你不需要每次都用PHP(或上帝禁止,手动)重做两个生日。

答案 2 :(得分:2)

我没有足够的声誉来发表评论,但如果你把更大的间隔放在第一位(而且年份不是YEARS,如指出的那样),那么David Grenier的答案将会有效。

SELECT *
FROM `users`
WHERE dob BETWEEN 
CURDATE() - INTERVAL 20 YEAR 
AND CURDATE() - INTERVAL 18 YEAR