我有一个表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
答案 0 :(得分:6)
您不应该为此目的使用 datediff()
。相反:
where dob> = dateadd(year,-25,getdate())和
 dob< = dateadd(年,-18,getdate())



 有两个重要原因。首先,在 dob
上使用函数可以防止使用索引和其他优化。这可能导致较差的查询计划。
其次, datediff()
衡量年份边界。因此,它实际上是回归18至25年前出生在日历年(从1月1日到12月31日)的人。通常,您对此日历不感兴趣。