쿼리문 질문입니다. 도와주세요~ > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

쿼리문 질문입니다. 도와주세요~ 정보

쿼리문 질문입니다. 도와주세요~

본문

주민번호 받은부분을 보면,

830708-*******  이런식으로 나오잖아요.
020708-******* 이런식으로 0부터 시작 하던가요..

그 앞에 숫자 두개를 가지고 통계를 내려고 하는데,

10세 미만, 10대, 20대, 30대 ..... 이렇게요..

제 생각에는 가상필드 만들어서 주민번호 앞에 두자리 가져오고 20보다 작으면 앞에 20을 붙이고,
20보다 크면 앞에 19를 붙여서 현재 년도와 비교해서 갯수를 가져오면 될거 같은데..

쿼리문을 어떠게 써야하는지 모르겠네요..
혹시 아시는분 좀 도와주세요..
다른 더 괜찮은 방법이 있으면 다른방법으로 가르쳐주셔도 되요..

읽어주셔서 감사하고 즐거운 하루 보내세요 ^^
  • 복사

댓글 전체

예제입니다:
만일 member 라는 테이블이 있고 jumin이라는 필드가 있을 때
 
SELECT SUBSTRING(jumin, 1, 2) AS shortyear, IF(SUBSTRING(jumin, 1, 2) > 20, CONCAT('19', SUBSTRING(jumin, 1, 2)), CONCAT('20', SUBSTRING(jumin, 1, 2))) AS year FROM member;

다음 쿼리를 돌리면 결과 값:
shortyear | year
-----------------
73 | 1973
08 | 2008
19, 20을 붙일 필요가 있나요?
오늘에서 주민번호를 빼면 살아온 날이고 365로 나누면 나이입니다.

$result = mysql_query("SELECT FLOOR((TO_DAYS(NOW()) - TO_DAYS(DATE_FORMAT('700101-*******','%Y%m%d'))) / 365) AS `age`");
$row = mysql_fetch_array($result);
echo $row['age'];
나이가 아니라 연령대별로 통계내려면...

$result = mysql_query("SELECT TRUNCATE(FLOOR((TO_DAYS(NOW()) - TO_DAYS(DATE_FORMAT(`주민번호필드`,'%Y%m%d'))) / 365), -1) AS `age`, COUNT(`주민번호필드`) AS `total` FROM `테이블` GROUP BY `age`");
while($row = mysql_fetch_array($result)) echo "{$row['age']}대 : {$row['total']}명";
답변 감사드립니다. ^^

오늘에서 주민번호를 빼고 365로 나누면...

( 90617 - 830708 ) / 365 이 말씀이신데요.

계산해보니 -2027 정도가 나오네요.
제 나이가 27 인데 앞에 20이 붙더라구요.
00년도 이후에 태어난 걸로 계산하니까 안맞는 부분이 있네요..
제가 잘못계산한건지...

쿼리문도 에러가나네요..
제가 잘 못 사용한건지... 실력이 없으니까 뭘해도 안되네요 ㅠㅠ

다시한번 파악해보겠습니다 ^^

다시한번 답변 감사드립니다 ^^ 즐거운 하루 보내세요 ^^
헉.. 단순히 오늘-주민번호로 생각하시면 안되죠.
수식으로는 20090101-20080101 = 1000이지만, 날짜로는 365가 맞죠.
date_format와 to_day는 단순수식이 아니고 날짜수식으로 바꿔주는 역할을 하는 함수입니다.

예를 들어 SELECT DATE_FORMAT('011225-*******', '%Y년 %m월 %d일')
==> 2001년 12월 25일, 지가 알아서 지정한 형식으로 리턴해줍니다.

SELECT TO_DAYS(now()) - TO_DAYS('1970-10-10')
==> 1970년 10월 10일부터 오늘날짜의 일수를 리턴해줍니다.

쿼리문은 테스트안해서 오류가 날지 모르지만 mysql 내장함수를 이용하면 편합니다;;;
© SIRSOFT
현재 페이지 제일 처음으로