在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岁儿童。为什么呢?
答案 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