将当前年龄转换为小数

时间:2016-09-15 06:27:47

标签: sql sql-server

我可以从出生日期开始获得当前年龄。但我有一个要求,我需要将当前年龄转换为两位小数的数字。

例如:36岁6个月15天应该是36.55。

我该怎么做?

4 个答案:

答案 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)

示例输出:

enter image description here

答案 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值作为近似值),则可以轻松处理月份中的不同天数;