我有一个表 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
最佳答案
您不应为此目的使用 datediff()
。相反:
where dob >= dateadd(year, -25, getdate()) and
dob <= dateadd(year, -18, getdate())
有两个重要的原因。首先,在 dob
上使用函数会阻止使用索引和其他优化。这可能会导致劣质查询计划。
其次,datediff()
测量年份界限。所以,它实际上是返回 18 到 25 年前出生在日历年(从 1 月 1 日到 12 月 31 日)的人。通常,您对用于此目的的日历不感兴趣。
关于sql - 如何在查询时使用 datediff 函数查找年龄范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50708630/