我試圖找到一個表的平均年齡,但某些記錄的年份爲0000
。平均年齡但不包括某些記錄
我該如何解決這個問題,因爲它會增加平均年齡?
這是我目前並返回112
Select
AVG(Datediff("yyyy",cast(dob_yyyy as int),getdate()))
from ppm..master_efields
我試圖找到一個表的平均年齡,但某些記錄的年份爲0000
。平均年齡但不包括某些記錄
我該如何解決這個問題,因爲它會增加平均年齡?
這是我目前並返回112
Select
AVG(Datediff("yyyy",cast(dob_yyyy as int),getdate()))
from ppm..master_efields
過濾掉 「古」 出生日期:
Select
AVG(Datediff("yyyy",cast(dob_yyyy as int),getdate()))
from ppm.master_efields
where dob_yyyy != '0000'
嘗試添加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該字段。
首先,您爲什麼要將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-%';
取決於字符串的格式。
使用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')
只是使用where子句過濾0000年。 – Bob
就像旁邊......你確定你想用'datediff()'來計算年齡嗎?它是整數運算,這意味着如果我的明天是50歲生日,「datediff」會顯示我已經49歲。 – Joe
你可以提供'dob_yyyy'值的例子嗎? –