경과일수를 몇년 몇개월 몇일 로 변환하고 싶습니다. 0 5 12,768

by 끌루니 [SQL Query] 경과일수 날짜계산 [2013.04.04 15:36:27]


경과일수(숫자값)을  
경과 연수, 개월, 일 의 단위로 조합하여 보여주고싶습니다.

365일 :  딱 1년이니까 -> 1년
395일 : (365+30) ->  1년 1개월
396일 : (365+30+1) -> 1년 1개월 1일

1년 미만이라면 
300일 (30*10) -> 10개월
301일(30*10) + 1 -> 10개월 1일 
29일 (29<30) -> 29일 

무슨방법이 없을까요?
by 마농 [2013.04.04 15:45:20]
윤년, 윤달, 30일, 31일 등등으로 인해 질문하신것처럼 딱 떨어지진 않을 것입니다.
일전에 비슷한 질문에 대해 답변드린 내용입니다.
http://www.gurubee.net/article/58322
계산 방법은
한달이 꽉찬 온전한 경우만 달수로 카운트 한뒤
앞 뒤 잘리는 일수만 가지고 일수를 계산하는 방법입니다.

by 끌루니 [2013.04.04 16:17:14]

윤년 윤달의 기준 30일 31일의 기준은 없구요.
무조건 365 , 30  기준입니다.
그리고 입력값은 날짜사이의 경과일이 아니라  그냥 단순일 수구요.
단순하게 INT 형 자료입니다.


by 아린 [2013.04.04 16:22:10]
WITH t(daycnt) AS(
SELECT 765 FROM dual UNION ALL
SELECT 365 FROM dual UNION ALL
SELECT 395 FROM dual UNION ALL
SELECT 396 FROM dual UNION ALL
SELECT 300 FROM dual UNION ALL  
SELECT 301 FROM dual UNION ALL
SELECT  29 FROM dual
)
SELECT daycnt
     , TRUNC(daycnt/365) 년
     , TRUNC(MOD(daycnt,365)/30) 월
     , MOD(MOD(daycnt,365),30) 일 
  FROM t

by 마농 [2013.04.04 16:31:12]

그런걸 안따질 수 없을 걸요.
365 일이 1년이라면
30일이 1개월이라면 12개월은 360일밖에 안되구요. 5일은 어찌할까요...
위 아린님의 답을 참고한다면
366 ==> 1년 0개월 1일
365 ==> 1년 0개월 0일
364 ==> 0년 12개월 4일
363 ==> 0년 12개월 3일
362 ==> 0년 12개월 2일
361 ==> 0년 12개월 1일
360 ==> 0년 12개월 0일
359 ==> 0년 11개월 29일
데이터가 일관성이 없어보이죠.


by 끌루니 [2013.04.04 16:40:22]
아 그런 맹점이 있었군요.
쿼리하나로 할게 아니라 따로 Fuction을 만들어야겠네요.
위에 아린님처럼 하면 나오긴 할텐데
마농님 말씀처럼 각 월별 마지막 일수 문제도 있고

32 ==> 0년 1개월 2일 이 아니라 ==> 1개월 2일
29 ==> 0년 0개월 29일 이 아니라 ==> 29일

이렇게 출력하는 문제도 있고 하군요.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입