如果在MySQL中将生日存储为类型“日期”,如何查找年龄在25到30岁之间的用户?

时间:2013-03-10 01:30:19

标签: mysql date date-of-birth

我已经被告知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类型时

2 个答案:

答案 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)