select case when substr(no,1,4) = substr(:year,1,4) then substr(no,1,4) || '-' ||LPAD(NVL(TO_NUMBER(SUBSTR(no,6)),0)+1,5,'0') --하나증가
else to_char(sysdate, 'yyyy') || '-' || '00001' end new_no
from
(
select '0221' DPTCD, '2017-00144' no from dual union all
select '0221', '2016-00111' no from dual union all
select '0221', '2015-00122' no from dual union all
select '0221', '2013-00133' no from dual union all
select '0221', '2017-00001' no from dual
)
짜다가 잘 안돼서 올립니다.
위에처럼 부서코드하고 일련번호가 있는데 :year 변수에 따라 하나증가된 번호를 따려고 합니다.
2015가 들어오면 2015-000123
2016이면 2016-00112
근데 이번년도 2018년도는 기존에 번호가 없어서 :year 변수에 2018을 넣으면 신규로 2018-00001 이런식으로 따려고 하는데 잘안되네요.
WITH t AS ( SELECT '0221' dptcd, '2017-00144' no FROM dual UNION ALL SELECT '0221', '2016-00111' no FROM dual UNION ALL SELECT '0221', '2015-00122' no FROM dual UNION ALL SELECT '0221', '2013-00133' no FROM dual UNION ALL SELECT '0221', '2017-00001' no FROM dual ) SELECT :year ||'-'|| LPAD(NVL(SUBSTR(MAX(no), 6) + 1, 1), 5, '0') next_no FROM t WHERE no LIKE :year || '%' -- AND dptcd = :v_dptcd -- 부서 조건 필요여부 검토 ;
SELECT :year || '-' || LPAD((CAST(NVL(SUBSTR(MAX(NO), 6), '00000') AS NUMBER) + 1), 5, '0') AS NO FROM (SELECT '0221' DPTCD, '2017-00144' NO FROM DUAL UNION ALL SELECT '0221' , '2016-00111' NO FROM DUAL UNION ALL SELECT '0221' , '2015-00122' NO FROM DUAL UNION ALL SELECT '0221' , '2013-00133' NO FROM DUAL UNION ALL SELECT '0221' , '2017-00001' NO FROM DUAL ) WHERE NO LIKE :year || '%'