在Microsoft SQL Server Management Studio中计算年龄

在Microsoft SQL Server Management Studio中计算年龄,sql,sql-server,Sql,Sql Server,我这么做了,但结果给了我所有30岁和不到30岁的人的名字 这是数据库: 捐赠者身份证、名字、姓氏、出生日期、性别、捐赠日期 捐赠者电话捐赠者ID,电话号码 诊所ID、诊所名称、诊所位置 血型 献血日血液状态、献血日期 员工ID、姓名、姓氏、性别 我用了这个代码-哪里错了 SELECT GETDATE () AS FirstName, FirstName, LastName, DATEADD(DD, 30, GETDATE()) AS [DateOfDonate- Dat

我这么做了,但结果给了我所有30岁和不到30岁的人的名字

这是数据库:

捐赠者身份证、名字、姓氏、出生日期、性别、捐赠日期 捐赠者电话捐赠者ID,电话号码 诊所ID、诊所名称、诊所位置 血型 献血日血液状态、献血日期 员工ID、姓名、姓氏、性别 我用了这个代码-哪里错了

SELECT
    GETDATE () AS FirstName, 
    FirstName, LastName,
    DATEADD(DD, 30, GETDATE()) AS [DateOfDonate- DateOfBirth],
    DATEADD(DD, 1-1-2000, GETDATE()) AS [DonateOfDate]
FROM
    Donor

我需要解决这个问题:找到年龄在30岁以上、自2000年1月1日以来一直在捐赠的捐赠者的姓名。我用实际字段计算,然后用你的字段替换,结果造成了混乱。 请在下面使用

  cast(datediff(Year,Date-Of-Birth,getdate()) as nvarchar(100))
+ ' Years , '
+ cast(datediff(Month,Date-Of-Birth,getdate())%12 as nvarchar(100))
+ ' months and '
+ cast(datediff(day,Date-Of-Birth,getdate()) as nvarchar(100))
+' days '

这将适用于您

好的,DATEADD的第二个参数是一个整数。因此,在一个地方,你把30天加到今天,在另一个地方,你把-2000天加到今天,你包括了一个计算,而不是一个日期,1-1-2000的结果是-2000到今天。但我不知道你想做什么。最好的建议是从捐赠者表中给出一些示例数据,然后从这些示例数据中给出一些您想要的示例结果。还有,也许读一下这个?查找年龄在30岁以上且自2000年1月1日起捐赠的捐赠者的姓名。我想解决这个问题这个链接是关于KM的回答。我需要它作为SQLi中的声明来解决这个问题:找到年龄在30岁以上并且从2000年1月1日起捐赠的捐赠者的姓名。当天部分将给出一个非常大的数字。。。这不是OP所要求的…这意味着什么?捐赠日期>=convertdate,'Date-of-捐赠',103=convertdate,'Date-of-捐赠',103='1/1/2000'
SELECT
    *
FROM
   donor
WHERE
        [date-of-birth]  <= DATEADD(YEAR, -30, GETDATE())  -- Anyone born more than 30 years ago
    AND [date-of-donate] >= '2000-01-01'                   -- Anyone that donated since 1st Jan 2000
SELECT
    *
FROM
   donor
WHERE
        [date-of-birth]  <= DATEADD(YEAR, -30, GETDATE())  -- Anyone born more than 30 years ago
    AND [date-of-donate] >= '2000-01-01'                   -- Anyone that donated since 1st Jan 2000