2017-12-27 1350 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')