2017-12-27 1331 views
0

我试图找到一个表的平均年龄,但某些记录的年份为0000平均年龄但不包括某些记录

我该如何解决这个问题,因为它会增加平均年龄?

这是我目前并返回112

Select 
    AVG(Datediff("yyyy",cast(dob_yyyy as int),getdate())) 
from ppm..master_efields 
+1

只是使用where子句过滤0000年。 – Bob

+0

就像旁边......你确定你想用'datediff()'来计算年龄吗?它是整数运算,这意味着如果我的明天是50岁生日,“datediff”会显示我已经49岁。 – Joe

+0

你可以提供'dob_yyyy'值的例子吗? –

回答

0

过滤掉 “古” 出生日期:

Select 
    AVG(Datediff("yyyy",cast(dob_yyyy as int),getdate())) 
from ppm.master_efields 
where dob_yyyy != '0000' 
0

尝试添加WHERE条件。

Select AVG(Datediff("yyyy",cast(dob_yyyy as int),getdate())) 
from ppm..master_efields 
WHERE dob_yyyy <> '0000' 

您也可以尝试限制dob_yyyy不通过引入CASE WHEN是零。

Select AVG(CASE WHEN dob_yyyy <> '0000' THEN Datediff("yyyy",cast(dob_yyyy as int),getdate())) from ppm..master_efields 

此外,如果您尝试显示某个字段的平均年龄,请不要忘记GROUP BY该字段。

0

首先,您为什么要将dob_yyyy转换为整数。你应该使用日期,而不是整数。

如果您将dob_yyyy作为字符串存储,那么您应该修复应用程序,以便将其存储为日期。但是,假设是你在做什么,我想你想:

Select AVG(Datediff(year, cast(dob_yyyy as date), getdate())) 
from ppm..master_efields 
where dob_yyyy not like '%-0000'; 

或:

where dob_yyyy not like '0000-%'; 

取决于字符串的格式。

0

使用WHERE子句跳过出生年份值的无效和空日期。

Select 
    AVG(Datediff("yyyy",cast(dob_yyyy as int),getdate())) 
from ppm..master_efields 
WHERE (dob_yyyy IS NOT NULL) AND (dob_yyyy > '1900')