在特定年龄段之间选择记录

时间:2018-10-20 15:44:56

标签: mysql sql

我有一列(bday),用于存储用户的生日信息。

我搜索了类似的问题,发现一个问题

select * from users where datediff(year, bday, getdate()) between 18 and 22;

但是,当我运行此命令时,我会得到

#1582 - Incorrect parameter count in the call to native function 'datediff'

正确的方法是什么?

2 个答案:

答案 0 :(得分:0)

错误1582是MySQL错误,因此大概是您在使用MySQL。

您可能想要的代码是:

select u.*
from users u
where u.bdate >= curdate() - interval 22 year and
      u.bdate < curdate() - interval 18 year;

这并不完全等同于SQL Server(或Amazon Redshift)datediff(year . . . )函数。那会更像:

select u.*
from users u
where year(u.bdate) - year(curdate()) between 18 and 22;

(注意:此计算中可能存在一个错误的错误。)

答案 1 :(得分:0)

根据MariaDB DATEDIFF的文档,只有两个参数:

  

DATEDIFF(expr1,expr2)   expr1expr2是日期或日期时间表达式。计算中仅使用值的日期部分,并且它返回(expr1 – expr2),表示为从一个日期到另一个日期的天数值。

所以您的查询应该是:

select * from users where datediff(bday,getdate()) between 18 and 22;