如何查找年龄超过20岁且未满25年的数据库php用户

时间:2018-07-03 03:52:14

标签: php mysql sql date

我在选择年龄大于或小于我选择的值的数据库时遇到了问题

当前样本年龄格式的数据库为“ 1996-07-30”

我想检索过滤器年龄大于20年且小于25年的用户数据

我尝试了一些查询,但是它不起作用,这是我创建的示例代码:

SELECT *
     , TIMESTAMPDIFF(YEAR, tglLahir, CURDATE()) AS age 
  FROM tb_member 
 WHERE TIMESTAMPDIFF(YEAR, tglLahir, CURDATE()) >= 20 
   AND (TIMESTAMPDIFF(YEAR, tglLahir, CURDATE()) <= 25 
 ORDER 
    BY nama
 LIMIT 0,10

并且我还尝试了另一个这样的示例:

SELECT *
     , TIMESTAMPDIFF(YEAR, tglLahir, CURDATE()) AS age 
   FROM `tb_member`  
  WHERE tglLahir BETWEEN DATE_SUB(NOW(), INTERVAL 20 YEAR) 
    AND DATE_SUB(date, INTERVAL 30 YEAR)
  ORDER 
     BY nama
  LIMIT 0,10

但仍然没有结果,还有其他解决方案可以解决此问题吗?

更新

我解决了我的问题,我仍然使用此代码:

TIMESTAMPDIFF(YEAR, tglLahir, CURDATE()) >= '20' AND 
TIMESTAMPDIFF(YEAR, tglLahir, CURDATE()) <= '25'

工作顺利,谢谢任何人回答我的问题,谢谢。

1 个答案:

答案 0 :(得分:2)

我真的很喜欢使用DATE_SUB()来为此目的进行计算(使用DATE_SUB从NOW()中减去得到20年前,然后是25年前)。结合BETWEEN,您应该可以做到:

SELECT *, TIMESTAMPDIFF(YEAR, tglLahir, CURDATE()) AS age 
FROM `tb_member` WHERE 
tglLahir BETWEEN 
DATE_SUB( NOW(), INTERVAL 20 YEAR) AND
DATE_SUB( NOW(), INTERVAL 25 YEAR)
ORDER BY `nama` LIMIT 0,10

您问题中的第二个查询示例已经接近,但是您在第二个date中使用了DATE_SUB(),我认为这可能是解决此问题的元凶。