MySQL查询:根据birth_date日期字段,是否有更好的方法来获取X岁或更老的用户

时间:2015-09-15 13:30:12

标签: mysql sql

我目前将用户的出生日期存储为DATE字段,其中0000-00-00为默认值。

我正在使用此查询来获取30岁或以上的用户。

SELECT * 
FROM myUsers
WHERE birth_date != '0000-00-00'    
AND DATE(birth_date) < DATE( DATE_SUB( NOW() , INTERVAL 30 YEAR ) ) 
ORDER BY user_id desc LIMIT 0,10

这是正确的SQL查询来获得我想要的吗? (让用户年龄大于或者说年龄已经超过30岁)并且可以进行改进/优化吗?

2 个答案:

答案 0 :(得分:2)

并非总是错误,但我不想将variables的日期存储为默认值,而是使用NULL(除非它具有特殊含义,您必须将其与NULL区分开)

然后您使用0000-00-00功能从日期时间字段中删除时间信息,但由于DATE()不是日期时间字段,因此没有理由使用它。如果存在,这可以使用索引。

然后您可以使用此查询:

birth_date

(如果默认值为NULL,则无需检查它)。只是决定是否要使用SELECT * FROM myUsers WHERE birth_date <= CURRENT_DATE()-INTERVAL 30 YEAR ORDER BY user_id DESC LIMIT 0,10 <,但我更喜欢后者,因为它将包括他们生日那天的人。

在birth_date和user_id字段上建立索引是一个好主意。

答案 1 :(得分:1)

如果您有0000-00-00个值,请使用BETWEEN,如下所示:

SELECT * 
FROM myUsers
WHERE birth_date BETWEEN '0000-01-01' and CURRENT_DATE() - INTERVAL 30 YEAR 
ORDER BY user_id DESC
LIMIT 0, 10