sql-server - 按年龄范围选择记录

标签 sql-server

我有下表

[tblRegistration](
    [FirstName] [nvarchar](100) NOT NULL,
    [MiddleName] [nvarchar](100) NOT NULL,
    [LastName] [nvarchar](100) NOT NULL,
    [DateOfBirth] [date] NOT NULL,
    [DateOfRegistration] [datetime] NOT NULL,

我的问题是:从表 tblRegistration 中选择年龄在 18 到 25 岁之间的所有记录。

谢谢!

最佳答案

一开始我以为DATEDIFF(YEAR, DateOfBirth, GETDATE())就足以获得年份差异,但 SQL Server 仅计算两个年份数字的简单 int 减法,因此当询问 2016.12.31 和 2017.01.01 之间的差异时,它返回 1。

因此,此外,还必须计算月份和日期:

SELECT *
FROM
(
    SELECT
        *,
        Age = DATEDIFF(yy, DateOfBirth, GETDATE()) -
            IIF(DATEPART(m, DateOfBirth) < DATEPART(m, GETDATE()), 0,
            IIF(DATEPART(m, DateOfBirth) > DATEPART(m, GETDATE()), 1,
            IIF(DATEPART(d, DateOfBirth) > DATEPART(d, GETDATE()), 1, 0)))
    FROM tblRegistration
) x
WHERE Age BETWEEN 18 AND 25

关于sql-server - 按年龄范围选择记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47901835/

相关文章:

SQL Server : identify first row value appears in column and insert into table

sql-server - 在没有 DBCC INPUTBUFFER 的情况下获取 SQL Server 中的最后一个命令

c# - 使用 Nhibernate 删除父项后删除多对多表中的所有记录

sql-server - 如何避免sp_OACreate限制?

SQL 多个 GROUP BY 表示在单行中

sql-server - 基于日期时间连接表,但日期时间值可以在 5 分钟内变化

sql-server - 重载解析失败,因为在没有缩小转换的情况下无法调用可访问的 'new'

sql-server - 无效的列名 'False'(经典asp,表编辑问题)

sql-server - Tomcat JNDI 数据源设置自己的数据库密码

c# - 是否存在用于同步本地和远程 SQL Server 数据库的 .NET 技术?