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

标签 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

最佳答案

您不应为此目的使用 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/

相关文章:

Mysql查询无法解决

sql-server - 错误处理的基本原理?

sql - 级联删除已打开?

java - MS-SQL Server、JDBC 和 XA 事务异常

MySQL IF 存在 INSERT else INSERT 过程

sql - SQl server 2005 中的 XML 列比较

sql - 值得去规范化我们的数据吗?

sql - SQL Server 2000 中的非系统数据库

sql-server - 更新给定属性的 SQL XML Field 节点值

javascript - PHP 重定向 URL