我可以从出生日期开始获得当前年龄。但我有一个要求,我需要将当前年龄转换为两位小数的数字。
例如:36岁6个月15天应该是36.55。我该怎么做?
答案 0 :(得分:1)
使用List<String> blacklist = Files.readAllLines(Paths.get(blacklistFile));
boolean hasBlacklist = Files.lines(Paths.get(filename)).anyMatch(blacklist::contains);
:
DATEDIFF
计算出生日期与现在之间的天数,转换为年数,然后将该数字舍入为小数点后两位。
以下是您的脚本的外观:
SELECT CAST(DATEDIFF(DAY, birthday, GETDATE()) / 365.25 AS DECIMAL (10,2))
FROM yourTable
答案 1 :(得分:1)
尝试使用以下脚本。
DECLARE @year INT =36
DECLARE @month INT=6
DECLARE @day INT=15
如果你想要36.5.5
SELECT CAST(@year+CAST(ROUND((@month+0.00)/12.0,1)as numeric(18,1)) as VARCHAR(10))+RIGHT(CAST(CAST(ROUND((@day+0.00)/30.0,1)as numeric(18,1)) as VARCHAR(10)),2)
如果你想要36.55
SELECT CAST(@year+CAST(ROUND((@month+0.00)/12.0,1)as numeric(18,1)) as VARCHAR(10))+RIGHT(CAST(CAST(ROUND((@day+0.00)/30.0,1)as numeric(18,1)) as VARCHAR(10)),1)
示例输出:
答案 2 :(得分:1)
1)计算整数(以月为单位的年龄)
2)计算天数
3)年龄(以月为单位)/ 12 +(额外天数)/ 365.2425
其中365.2425是我计算的一年中的平均天数
DECLARE @DOB date = '1966-04-23';
DECLARE @CALCDATE date = '2016-09-15';
--
SELECT
(DATEDIFF(month, @DOB, @CALCDATE) - CASE WHEN DAY(@DOB) > DAY(@CALCDATE) THEN 1 ELSE 0 END) / 12.0 +
DATEDIFF(day,
DATEADD(month,
datediff(month,@DOB, @CALCDATE) - CASE WHEN DAY(@DOB) > DAY(@CALCDATE) THEN 1 ELSE 0 END,
@dob),
@CALCDATE) / 365.2425
答案 3 :(得分:0)
你可以尝试计算几天的月份,并按照365的比例得到小数(闰年的问题,取决于你想要的准确度)。如果您将出生日期存储在某处(或者将30值作为近似值),则可以轻松处理月份中的不同天数;