고수님들 쿼리 도와주세요 ㅜㅜ
WITH T
AS (SELECT 'AAOS12001' AS CD FROM DUAL
UNION ALL
SELECT 'AAOS12002' AS CD FROM DUAL)
SELECT CD
FROM T
WHERE SUBSTR(CD,1,6) = 'AAOS12'
위의 쿼리에서 CD 값이 MAX 하여 나온 값에 AAOS12002 입니다.
AAOS12002를 끝에 002를 003으로 1 플러스 하고 싶습니다.
그리고 한가지 더 알고 싶은 것은
WHERE 절에 있는 AAOS12 파라미터가 AAOS13으로 넘어왔을때 DATA가 존재하지 않아 조회 되지 않습니다.
이런경우에는 AAOS13001 이렇게 셋팅되게 하고 싶습니다. 고수님들 도와주세요 ㅜㅜ
WITH T AS ( SELECT 'AAOS12001' AS CD FROM DUAL UNION ALL SELECT 'AAOS12002' AS CD FROM DUAL ) SELECT 'AAOS13' || LPAD(NVL(SUBSTR(MAX(CD),7,3),0) + 1 , 3 , '0') FROM T WHERE SUBSTR(CD,1,6) = 'AAOS13'
WITH t AS ( SELECT 'AAOS12001' cd FROM dual UNION ALL SELECT 'AAOS12002' FROM dual ) SELECT :v_prefix || LPAD(NVL(SUBSTR(MAX(cd), 7, 3) + 1, 1), 3, '0') AS next_cd FROM t WHERE cd LIKE :v_prefix || '%' ;
WITH T AS
(SELECT 'AAOS12001' AS CD FROM DUAL UNION ALL
SELECT 'AAOS12002' AS CD FROM DUAL
)
select nvl(max(str||to_char(no+1, 'fm000')), :b1||'001') as val
from (SELECT substr(cd, 1, 6) str
, substr(cd, -3) no
FROM T
WHERE CD like :b1||'%'
);
우리집아찌 님의 SUBSTR 조건은 인덱스를 이용하지 못하므로 LIKE 로 바꾸는 게 좋습니다.
소주쵝오 님의 MAX(str...) 방식은 MAX 쿼리를 효율적으로 사용하지 못하므로 MAX(cd)를 이용하는게 좋습니다.
핫 .. 아무생각없이 예제를 그냥 썼네요. ㅎㅎ
앗.. 조언 감사합니다~ㅎ
도움주셔서 감사합니다.