2017-12-27 4 views
0

테이블의 평균 연령을 찾으려고하지만 일부 레코드의 연도는 0000입니다.평균 연령 (특정 레코드 제외)

평균 연령이 높아질 때이를 어떻게 피할 수 있습니까?

이 내가 현재 가지고있는이며 112

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

0000 년을 걸러 내려면 where 절을 사용하십시오. – Bob

+0

그냥 제쳐두고 ... 당신은 'datediff()'를 사용하여 연령을 계산 하시겠습니까? 그것은 정수 수학을 의미합니다. 즉, 제 50 번째 생일이 내일이면, ​​'데이트 티프 (datediff)'는 정확히 49 세인 것으로 나타납니다. – Joe

+0

'dob_yyyy' 값의 예제를 제공 할 수 있습니까? –

답변

0

필터링 "고대"생년월일 반환 값 : WHERE 조건을 추가

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

시도합니다.

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

또한 dob_yyyyCASE 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 절을 사용하면 올바르지 않은 날짜 및 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') 
관련 문제