我有一张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
答案 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;