如何在查询时使用datediff函数查找年龄范围?

时间:2018-06-05 20:42:48

标签: sql sql-server

我有一个表A,其中包含出生日期(dd-mm-yy格式)列,DOB,并假设另一个表B,其中包含我想要加入的数据。考虑到18到25岁的特定年龄范围,我该如何加入?

这就是我所写的,但它不起作用:

select * from B
inner join (select * from A
    where datediff(year, DOB, year(getdate())) between 18 and 25) A
on B.id = A.id

1 个答案:

答案 0 :(得分:6)

您不应该为此目的使用 datediff()。相反:




  where dob> = dateadd(year,-25,getdate())和
 dob< = dateadd(年,-18,getdate())
  




有两个重要原因。首先,在 dob 上使用函数可以防止使用索引和其他优化。这可能导致较差的查询计划。





其次, datediff()衡量年份边界。因此,它实际上是回归18至25年前出生在日历年(从1月1日到12月31日)的人。通常,您对此日历不感兴趣。