경력계산 ( 역에의한 계산방법) 을 하려고 하는데 너무 어렵습니다. 0 1 4,716

by 김경일 [PL/SQL] [2014.06.02 16:52:51]


민법 160조 역에 의한 계산 방법으로  경력계산할때 쓰는 방법인데..

 

도저히 어떻게 해야할지 몰라 이렇게 글을 올립니다.

 

혹, 쿼리로 짜신분이나 경험 있으신분 도움좀 부탁드립니다.

 

* 기간을 주(週), 월(月,) 또는 년(年)으로 정한 때에는 曆에 의하여 계산한다.
* 주(週), 월(月) 또는 년(年)의 처음으로부터 기간을 기산(起算)하지 아니한 때        에는 최후의  주(週), 월(月), 또는 년(年)에서 그 기산일(起算日)에 해당한 날의 전일(前日)로 기간이 만료한다.
* 월(月) 또는 년(年)으로 정(定)한 경우에 최종의 월(月)에 해당일이 없는 때에는       그 월(月)의 말일(末日)로 기간이 만료한다

by 마농 [2014.06.03 14:18:33]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
WITH t AS
(
SELECT '20130201' sdt, '20130228' edt FROM dual
UNION ALL SELECT '20130201', '20130605' FROM dual
UNION ALL SELECT '20130201', '20140315' FROM dual
UNION ALL SELECT '20130201', '20140530' FROM dual
)
, t1 AS
(
SELECT TO_DATE(sdt, 'yyyymmdd') sdt
     , TO_DATE(edt, 'yyyymmdd') edt
  FROM t
)
SELECT sdt, edt
     -- 1. 주차(00주 0일)
     , FLOOR((edt - sdt + 1) / 7) ww
     , MOD(edt - sdt + 1, 7) wd
     -- 2. 월차(00월 00일)
     , FLOOR(MONTHS_BETWEEN(edt+1, sdt)) m1
     , edt - ADD_MONTHS(sdt, FLOOR(MONTHS_BETWEEN(edt+1, sdt))) + 1 m2
     -- 3. 연차(00년 00월 00일)
     , FLOOR(MONTHS_BETWEEN(edt+1, sdt)/12) y1
     , MOD(FLOOR(MONTHS_BETWEEN(edt+1, sdt)),12) y2
     , edt - ADD_MONTHS(sdt, FLOOR(MONTHS_BETWEEN(edt+1, sdt))) + 1 y3
     -- 4. 월 최대일을 30일로 보는 경우 30일은 29일로 표시
     , LEAST(edt - ADD_MONTHS(sdt, FLOOR(MONTHS_BETWEEN(edt+1, sdt))) + 1, 29) y4
  FROM t1
;

 

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