sql을 기반으로 경력계산(역에의한 계산방법)을 문의드리고자 합니다. 0 2 6,282

by sql어린이 [SQL Query] [2024.08.08 10:19:37]


검색을 통해서 아래와 같이 월차에 대해서 구하는 방법은 알았는데요.

일차를 개월수로 표현(소수점)으로 하고 싶습니다. 방법이 있을까요?

예를들어, 20240706~20240803의 기간의 일수는 29일이고 (초일산입)

이걸 개월수로 표현하면 20240706~20240705의 일수인 31일로 나누어서 29/31로 표현하고 싶거든요.

다른 예로 20240906~20241003이라고 하면 일수 28일이고 30일로 나누어서 28/30으로 표현하고 싶습니다.

고수님들께서 방법을 알려주시면 좋을듯하여 글을 남깁니다. 

------------------------------------------------------------------------------------------------------------------

SELECT sdt, edt
     -- 2. 월차(00월 00일)
     , FLOOR(MONTHS_BETWEEN(edt+1, sdt)) m1
     , edt - ADD_MONTHS(sdt, FLOOR(MONTHS_BETWEEN(edt+1, sdt))) + 1 m2
  FROM t1
;

 

by sql어린이 [2024.08.08 10:42:51]

그리고 위 sql상으로 일차를 계산하다보니 2월등의 경우 일차가 음수가 나오는경우가 있더라구요. 

예를들어 20190228~20190329의 경우 월은 1로 나오지만 일의 경우 -2로 나와서 이부분도 개선이 될 수 있을까 문의드립니다. (add_months로 개월차를 구하다보니 위와 같이 음수가 나오는경우가 나오네요.)


by 마농 [2024.08.08 13:17:12]

일수는 당년히 맞아 떨어지지만
월수는 정확하게 딱 맞아 떨어지지 않습니다.
월마다 일수가 다르고, 특히 2월은 일수가 부족하고
윤달, 윤년에 따라 2월의 일수가 달라지고 등등
어떤 기준을 잡고 구할지 전략을 잘 세워야 합니다.

20240906 ~ 20241003 은 9월의 30일을 기준을 28/30 로 표현하고 싶다고 하셨는데?
20240926 ~ 20241023 은 어떻게 표현해야 할까요?
09월이 기준이 되어야 할까요? 시작월이 9월이니 -> 28/30
10월이 기준이 되어야 할까요? 10월의 일수가 더 많으니 -> 28/31
20240131 ~ 20240229 는 어떻게 표현해야 할까요?
31 일 기준으로는 아직 한달이 안되었는데. 2월은 이미 꽉찬 한달입니다.
시작 종료가 여러달에 걸친 자료들도 있을 것입니다.
그에 대한 전략은 있으신지요?

저는 이런 전략이 어떨까 생각합니다.
중간에 꽉 찬 달은 따로 개월수를 구하고
앞뒤로 월이 모자란 일수를 따로 구하는 방식
예를 들면 20240131 ~ 20240302 은 3개의 구간으로 나누어 합산하는 방식
1) 20240131 ~ 20240131 : 1/31
2) 20240201 ~ 20240229 : 29/29
3) 20240301 ~ 20240302 : 2/31

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