쿼리문 질문입니다. 도와주세요~ 정보
쿼리문 질문입니다. 도와주세요~
본문
주민번호 받은부분을 보면,
830708-******* 이런식으로 나오잖아요.
020708-******* 이런식으로 0부터 시작 하던가요..
그 앞에 숫자 두개를 가지고 통계를 내려고 하는데,
10세 미만, 10대, 20대, 30대 ..... 이렇게요..
제 생각에는 가상필드 만들어서 주민번호 앞에 두자리 가져오고 20보다 작으면 앞에 20을 붙이고,
20보다 크면 앞에 19를 붙여서 현재 년도와 비교해서 갯수를 가져오면 될거 같은데..
쿼리문을 어떠게 써야하는지 모르겠네요..
혹시 아시는분 좀 도와주세요..
다른 더 괜찮은 방법이 있으면 다른방법으로 가르쳐주셔도 되요..
읽어주셔서 감사하고 즐거운 하루 보내세요 ^^
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
만일 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'];
오늘에서 주민번호를 빼면 살아온 날이고 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']}명";
$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년도 이후에 태어난 걸로 계산하니까 안맞는 부분이 있네요..
제가 잘못계산한건지...
쿼리문도 에러가나네요..
제가 잘 못 사용한건지... 실력이 없으니까 뭘해도 안되네요 ㅠㅠ
다시한번 파악해보겠습니다 ^^
다시한번 답변 감사드립니다 ^^ 즐거운 하루 보내세요 ^^
오늘에서 주민번호를 빼고 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 내장함수를 이용하면 편합니다;;;
수식으로는 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 내장함수를 이용하면 편합니다;;;
아! 그렇군요 ㅎㅎ
덕분에 한가지 배웠습니다
감사드립니다 ^^
저도 공부 더 열심히 해서 다른 분들에게 도움을 많이 드려야겠어요 ^^
덕분에 한가지 배웠습니다
감사드립니다 ^^
저도 공부 더 열심히 해서 다른 분들에게 도움을 많이 드려야겠어요 ^^
도움이 됐다니 다행이네요