我在选择年龄大于或小于我选择的值的数据库时遇到了问题
当前样本年龄格式的数据库为“ 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'
工作顺利,谢谢任何人回答我的问题,谢谢。
答案 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()
,我认为这可能是解决此问题的元凶。