使用过去特定日期的 DoB 计算年龄
Calculating Age Using DoB from a Specific Date in the past
我正在寻求帮助:
我需要计算截至 2020 年 2 月 1 日的会员年龄(DoB 字段)。例如,如果一个成员的 DoB 是 2/18/91,我希望看到两个字段。 1 为会员截至今日的实际年龄,然后为会员截至 2020 年 2 月 1 日的年龄。在此示例中,第一个字段中的年龄应为 30,但第二个字段中的年龄应为 29。
我尝试使用一些 datefiff 和 datepart,但我似乎无法理解。我正在使用 SSMS 2016。
你的计算有误。那个人那个时候应该28岁吧
一个简单的技巧是将日期视为 yyyyMMdd 形式的数字,然后从 DOB 中减去目标日期并得到整数部分。使用您的样本日期:
DECLARE @dob DATETIME='19910218';
DECLARE @targets TABLE(target DATETIME);
INSERT @targets(target)VALUES('20200201'), (GETDATE());
SELECT
FLOOR(((YEAR(target)* 10000+MONTH(target)* 100+DAY(target))
-(YEAR(@dob)* 10000+MONTH(@dob)* 100+DAY(@dob))
)/ 10000
)
FROM @targets;
PS: floor 可能是不必要的,SQL服务器进行整数除法,但我想保留它作为安全。
datediff(year, <birthdate>, <currentdate>) +
case when
month(<birthdate>) > month(<currentdate>) or
month(<birthdate>) = month(<currentdate>) and
day(<birthdate>) > day(<currentdate>)
then -1 else 0 end
将日期转换为 8 个字符的整数,减去并除以 10000:
declare @Birthdate date = '2/18/91'
declare @AsOfDate date = '2/1/2020'
select (0+convert(char(8),getdate(),112) - convert(char(8),@birthdate,112)) / 10000 as CurrentAge
, (0+convert(char(8),@asofdate,112) - convert(char(8),@birthdate,112)) / 10000 as FebAge
我正在寻求帮助:
我需要计算截至 2020 年 2 月 1 日的会员年龄(DoB 字段)。例如,如果一个成员的 DoB 是 2/18/91,我希望看到两个字段。 1 为会员截至今日的实际年龄,然后为会员截至 2020 年 2 月 1 日的年龄。在此示例中,第一个字段中的年龄应为 30,但第二个字段中的年龄应为 29。
我尝试使用一些 datefiff 和 datepart,但我似乎无法理解。我正在使用 SSMS 2016。
你的计算有误。那个人那个时候应该28岁吧
一个简单的技巧是将日期视为 yyyyMMdd 形式的数字,然后从 DOB 中减去目标日期并得到整数部分。使用您的样本日期:
DECLARE @dob DATETIME='19910218';
DECLARE @targets TABLE(target DATETIME);
INSERT @targets(target)VALUES('20200201'), (GETDATE());
SELECT
FLOOR(((YEAR(target)* 10000+MONTH(target)* 100+DAY(target))
-(YEAR(@dob)* 10000+MONTH(@dob)* 100+DAY(@dob))
)/ 10000
)
FROM @targets;
PS: floor 可能是不必要的,SQL服务器进行整数除法,但我想保留它作为安全。
datediff(year, <birthdate>, <currentdate>) +
case when
month(<birthdate>) > month(<currentdate>) or
month(<birthdate>) = month(<currentdate>) and
day(<birthdate>) > day(<currentdate>)
then -1 else 0 end
将日期转换为 8 个字符的整数,减去并除以 10000:
declare @Birthdate date = '2/18/91'
declare @AsOfDate date = '2/1/2020'
select (0+convert(char(8),getdate(),112) - convert(char(8),@birthdate,112)) / 10000 as CurrentAge
, (0+convert(char(8),@asofdate,112) - convert(char(8),@birthdate,112)) / 10000 as FebAge