6

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 岁。为什么?

4

3 回答 3

4

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

于 2012-10-30T20:50:28.053 回答
4

我会建议类似:

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

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

这有点干净,因为您不需要每次都在 PHP 中重做两个生日(或者上帝保佑,手动)。

于 2012-10-30T21:01:55.250 回答
3

我没有足够的声誉来发表评论,但如果你把更大的间隔放在首位,大卫格雷尼尔的回答会起作用(正如所指出的那样,年份不是年份)

SELECT *
FROM `users`
WHERE dob BETWEEN 
CURDATE() - INTERVAL 20 YEAR 
AND CURDATE() - INTERVAL 18 YEAR 
于 2013-12-05T22:47:00.353 回答