我已经被告知SO before,正确的做法是:
WHERE birth_date BETWEEN date_sub(curdate(), INTERVAL 25 YEAR)
AND date_sub(curdate(), INTERVAL 30 YEAR)
然而,这实际上并不包括年龄超过30岁且年龄小于31岁的用户。当我们通常谈到人们的年龄时,我们会将30岁零11个月的人仍然是“30”。
考虑到这一点,仅仅制作第二个间隔31
(比你想要的还要多一年)似乎是一个明显的解决方案,但这包括今天满31岁的用户,所以这没有用。
那么明确的和最快方式是什么方法可以找到年龄大于或等于的用户为25且更少< / strong> 31,当生日在MySQL中存储为date
类型时
答案 0 :(得分:3)
您只需要将另外两天添加到第一个日期,如下所示:
WHERE birth_date
BETWEEN
date_add(
date_sub(curdate(), INTERVAL 31 YEAR),
INTERVAL 1 DAY
)
AND date_sub(curdate(), INTERVAL 25 YEAR)
看看另一个提议的答案,实际上有一个更简单的解决方案。
WHERE birth_date <= date_sub(curdate(), INTERVAL 25 YEAR)
AND birth_date > date_sub(curdate(), INTERVAL 31 YEAR)
注意第二次比较中的>
,可以节省添加1天的时间间隔,但仍需要使用31年而不是30年。BETWEEN AND
表达式将>=
表示<=
{{1}}。
(当证明是正确的时候请接受他的答案,他/你编辑了比较并将30改为31-他指出了我正确的方向)
答案 1 :(得分:1)
你没有 使用BETWEEN
来进行正常比较时的日期,特别是那种奇怪的边缘行为。
WHERE birth_date <= date_sub(curdate(), INTERVAL 25 YEAR)
AND birth_date >= date_sub(curdate(), INTERVAL 30 YEAR)