알파벳을 포함한 문자열 채번을 못하겠네요 ㅠ 1 6 826

by 혜당화 [SQL Query] [2018.06.04 11:38:51]


시퀀스 값이 최초 생성시에는 A01A01A01 입니다.

이거를 다음 채번시에는 A01A01A02 와 같이 채번하고 

99번째는는 A01A01A99  , 100번째는 A01A01B01과

같이 99번 이후로는 알바벳이 증가하고 

계속 증가하다가 A01A01Z99 이후로는 또 A01A02A01 과

같이 값이 나오게 하려니 도저히 감이 안오네요. 도움을 부탁드립니다.

by 우리집아찌 [2018.06.04 12:33:17]
--시퀀스 테이블 하나 만들어서 쓰시는건 어떠세요.

CREATE TABLE TB_SEQ AS 

WITH A AS (
SELECT CHR(64+LEVEL) V FROM DUAL CONNECT BY LEVEL <= 26
) , B AS (
SELECT  TO_CHAR(LEVEL,'FM00') V FROM DUAL CONNECT BY LEVEL <= 99
) , C AS (
SELECT A.V || B.V V  FROM A , B  
)

SELECT AA.V || BB.V || CC.V SEQ 
  FROM C AA , C BB , C CC

 


by 혜당화 [2018.06.04 13:16:53]

규정이...테이블 생성 및 프로시저,펑션 생성을 못하게 되어 있습니다. ㅠㅠ

 


by 부쉬맨 [2018.06.04 13:44:02]
with t(a) as

(

select 'A01A01A99' from dual union all

select 'A01A01B01' frmo dual
)

select case when regexp_substr(a,'[0-9]+$')+1 ='100' then '01' 

else lpad(to_number(regexp_substr(a,'[0-9]+$')+1 ,2,'0') end

from t

 

 


by 마농 [2018.06.04 14:16:15]
WITH t AS
(
-- 주석 제거해 가면서 case 별로 테스트 해보세요 --
SELECT '' seq FROM dual WHERE 1=2      -- Case 0 (Null)
UNION ALL SELECT 'A01A01A01' FROM dual -- Case 1 (_________)
UNION ALL SELECT 'A01A01A99' FROM dual -- Case 2 (_______99)
--UNION ALL SELECT 'A01A90Z99' FROM dual -- Case 3 (______Z99)
--UNION ALL SELECT 'A01A99Z99' FROM dual -- Case 4 (____99Z99)
--UNION ALL SELECT 'A01Z99Z99' FROM dual -- Case 5 (___Z99Z99)
--UNION ALL SELECT 'C99Z99Z99' FROM dual -- Case 6 (_99Z99Z99)
--UNION ALL SELECT 'Z99Z99Z99' FROM dual -- Case 7 (Z99Z99Z99)
)
SELECT seq curr_seq
     , CASE WHEN v6 IS NULL THEN 'A01A01A01'
            WHEN v6 < '99'  THEN v1||v2||v3||v4||v5||x6
            WHEN v5 < 'Z'   THEN v1||v2||v3||v4||x5||'01'
            WHEN v4 < '99'  THEN v1||v2||v3||x4||   'A01'
            WHEN v3 < 'Z'   THEN v1||v2||x3||     '01A01'
            WHEN v2 < '99'  THEN v1||x2||        'A01A01'
            WHEN v1 < 'Z'   THEN x1||          '01A01A01'
            ELSE 'out of bound'
        END next_seq
  FROM (SELECT seq
             , v1, v2, v3, v4, v5, v6
             , CHR(ASCII(v1) + 1) x1, LPAD(v2 + 1, 2, '0') x2
             , CHR(ASCII(v3) + 1) x3, LPAD(v4 + 1, 2, '0') x4
             , CHR(ASCII(v5) + 1) x5, LPAD(v6 + 1, 2, '0') x6
          FROM (SELECT seq
                     , SUBSTR(seq, 1, 1) v1, SUBSTR(seq, 2, 2) v2
                     , SUBSTR(seq, 4, 1) v3, SUBSTR(seq, 5, 2) v4
                     , SUBSTR(seq, 7, 1) v5, SUBSTR(seq, 8, 2) v6
                  FROM (SELECT MAX(seq) seq FROM t)
                )
        )
;

 


by 혜당화 [2018.06.04 14:44:15]

아스키코드로 어떻게 하면 될것 같았는데 답안을 본것같아 시원하네요.

마농님 매번 감사드립니다. 


by 느훼훼 [2018.06.05 09:09:20]

어우~ 순번을 왜 저런식으로 구성을 하는지 이해가 가질 않네요;;

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