我试图找到一张桌子的平均年龄,但有些记录的年份为0000
。
如何提高平均年龄?
这是我目前所拥有的,它返回112
Select
AVG(Datediff("yyyy",cast(dob_yyyy as int),getdate()))
from ppm..master_efields
答案 0 :(得分:0)
过滤掉#34;古代"出生日期:
Select
AVG(Datediff("yyyy",cast(dob_yyyy as int),getdate()))
from ppm.master_efields
where dob_yyyy != '0000'
答案 1 :(得分: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该字段。
答案 2 :(得分: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-%';
取决于字符串的格式。
答案 3 :(得分:0)
使用WHERE子句跳过出生年份值的无效和NULL日期。
Select
AVG(Datediff("yyyy",cast(dob_yyyy as int),getdate()))
from ppm..master_efields
WHERE (dob_yyyy IS NOT NULL) AND (dob_yyyy > '1900')