테이블의 평균 연령을 찾으려고하지만 일부 레코드의 연도는 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
필터링 "고대"생년월일 반환 값 : WHERE
조건을 추가
Select
AVG(Datediff("yyyy",cast(dob_yyyy as int),getdate()))
from ppm.master_efields
where dob_yyyy != '0000'
시도합니다.
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 절을 사용하면 올바르지 않은 날짜 및 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')
0000 년을 걸러 내려면 where 절을 사용하십시오. – Bob
그냥 제쳐두고 ... 당신은 'datediff()'를 사용하여 연령을 계산 하시겠습니까? 그것은 정수 수학을 의미합니다. 즉, 제 50 번째 생일이 내일이면, '데이트 티프 (datediff)'는 정확히 49 세인 것으로 나타납니다. – Joe
'dob_yyyy' 값의 예제를 제공 할 수 있습니까? –