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() 버튼을 클릭하여 작성 하시면 됩니다.