Sql 试图计算出生日期
我有一张有300人的表格,需要根据他们的出生日期计算他们截至2017年1月4日的年龄。我知道我缺少填充@dob变量的功能,因此无法找到它。以下是我所拥有的:Sql 试图计算出生日期,sql,sql-server,Sql,Sql Server,我有一张有300人的表格,需要根据他们的出生日期计算他们截至2017年1月4日的年龄。我知道我缺少填充@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, F
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
不要试图手动计算完整的年份数,而是使用带有
year
参数的函数:
SELECT
p.dob
, DATEDIFF(year, p.dob, @cutoff) AS AgeAsOfCutoff
FROM [PGADCP].[dcp].[person] p
请注意,您根本不需要
@dob
变量,因为dob
的值来自[person]
表中相应的列。这在SQL Server中很复杂。您需要做的是减去三个月零一天,然后使用从“2016-12-31”起的datediff()
即:
select p.dob,
datediff(year, dateadd(month, -3, dob), '2016-12-31') as AgeAtCutoff
原因是datediff()
统计年份边界。想必,你不想给十二月出生的人加上一岁
另一种方法是近似方法:
select datediff(day, dob, '2017-04-01') / 365.25
这在大多数情况下都很有效。这里有一种计算年龄的方法:
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];
这应该能告诉你他们离截止日期的确切年龄
declare @asat date = '2017-01-01'
SELECT (DATEDIFF(HOUR, date_of_birth, @asat) / 8766) AS [Age]
from myPeople
试验
这是简单的数学。从2017年减去出生年份。然后检查出生月/日是否在04年1月之前,因为在这种情况下,您必须减去一年,因为还没有到那一年的生日
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;
使用DateDiff函数怎么样?请注意,并非所有年份的天数都相同。因此,使用365.25进行计算只是一个近似值。您可能会面临计算一年太少的情况。@vmd1310DATEDIFF
有什么问题?为什么要创建自己的算术?
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;