试图计算出生日期

时间:2018-02-19 21:08:32

标签: sql sql-server

我有一张300人的桌子,需要根据他们的DOB计算截至04/01/2017的年龄。我知道我缺少填充我的@dob变量并且无法弄明白。这就是我所拥有的:

Declare @dob  datetime

Declare @cutoff datetime

set @cutoff = '2017-04-01'

Select dob, FLOOR((CAST (@cutoff AS INTEGER) - CAST(@dob AS INTEGER)) / 365.25) AS Age,   
 FROM  [PGADCP].[dcp].[person] p

5 个答案:

答案 0 :(得分:1)

这在SQL Server中很复杂。您需要做的是减去三个月和一天并使用{2016年7月31日'的.example.com

那是:

datediff()

原因是select p.dob, datediff(year, dateadd(month, -3, dob), '2016-12-31') as AgeAtCutoff 计算年份边界。据推测,您不希望将年龄添加到12月出生的人身上。

另一种方法是近似方法:

datediff()

这对大多数事情都很有效。

答案 1 :(得分:0)

不要手动计算全年的数量,而是使用带有year参数的DATEDIFF函数:

SELECT
    p.dob
,   DATEDIFF(year, p.dob, @cutoff) AS AgeAsOfCutoff  
FROM  [PGADCP].[dcp].[person] p

请注意,您根本不需要@dob变量,因为dob的值来自[person]表中的相应列。

答案 2 :(得分:0)

这是计算年龄的一种方法:

DECLARE @cutoff datetime = '20170401';
SELECT 
    (CAST(CONVERT(char(8), @cutoff, 112) AS int) -
    CAST(CONVERT(char(8), dob, 112) AS int)) /10000 AS Age
FROM [PGADCP].[dcp].[person];

答案 3 :(得分:0)

这应该给你从截止日期开始的确切年龄

declare @asat date = '2017-01-01'

SELECT   (DATEDIFF(HOUR, date_of_birth, @asat) / 8766) AS [Age] 
from myPeople

测试

declare @asat date = '2017-11-17'
declare @mydbo date = '1981-11-18'

SELECT   (DATEDIFF(HOUR, @mydbo, @asat) / 8766) AS [Age] 

答案 4 :(得分:0)

这简单的数学。从2017年开始减去出生年份。然后检查出生月份/日是否在01/04之前,因为在这种情况下,您必须减去一年,因为尚未达到该年份的生日。

select 
  dob, 
  2017 - year(dob) - case when '01/04' > convert(char(5), dob, 1) then 1 else 0 end as age
from pgadcp.dcp.person;