2014-01-29 3 views
1

DOB의 계산 나이는 비교적 간단하지만 데이터베이스의 다른 데이터 입력 형식과 관련된 문제가 있습니다. 또한 PHP를 사용하면이 작업이 더 쉬워 질 수 있지만 PHP는 알지 못하고 MySQL과 만 작업 할 수 있습니다.MySQL : 계산할 필드의 출력 수정

DB에 입력 된 DOB는 "월/일/년"또는 "00/00/0000"으로 입력됩니다. 그러나 오늘 날짜에 대해 계산할 때 날짜는 "년 - 월 - 일"또는 "0000-00-00"으로 형식화됩니다. 또한 DOB 필드에 배치 된 월은 한 달 (1/01/1999) 또는 두 달 (01/01/1999) 일 수 있으므로 일관성이 없습니다.

나는 DOB를 연령 계산에보다 적합한 형식으로 출력하기 위해 CONCAT, SUBSTRING 및 LOCATE를 활용하기 위해 아래를 사용하려고합니다. 나는 내가 가깝다고 생각하지만 거기에는별로 없다. 어떤 도움이라도 대단히 감사 할 것입니다.

SELECT 
CONCAT(SUBSTRING(APPU_DOB,-4,4),'-', SUBSTRING(APPU_DOB,LOCATE('/', APPU_DOB),1),'-',SUBSTRING(APPU_DOB,4,2))  
FROM APPU_APP_USER 
JOIN APPL_APP ON APPU_APPL_ID = APPL_ID 
     WHERE DATE_FORMAT(APPL_CREATE_DT, '%Y-%M-%D') >= '2014-01-01'; 
+0

실용적이지 않지만 APPU_DOB을 문자열 유형 대신 날짜 유형으로 저장하도록 테이블을 리팩터링해야합니다. 올바른 타이핑을 통해 직면하는 것과 같은 문제를 피할 수 있습니다. –

+0

여기에 appu_dob 열이 있습니까? –

답변

0

대신 Concat을 사용하십시오. str_to_date 기능을 사용하십시오.

이 값 1999-01-01에 유효한 날짜 형식의 개체를 반환 1/01/1999
select str_to_date(appu_dob, '%m/%d/%Y') as 'dob'; 

.
다른 날짜에 문자열에 사용할 수 있습니다.이 번호는 한 자리 또는 두 자리 숫자의 일 또는 월 번호가 있습니다.

: 대표 또는 한 달을 참조하려면, 형식 패턴 문자열에 Mm하지만 자본 작은 케이스를 사용합니다.

appu_dob 필드의 데이터 유형을 date으로 다시 정의하는 것이 좋습니다. 따라서 계산을 위해 날짜 관련 함수를 쉽게 적용 할 수 있습니다.

+0

이것은 완벽하게 작동했습니다! 고맙습니다. – user2356890