쿼리질문올립니다. 0 4 1,303

by BadGod [SQL Query] [2016.10.05 15:09:52]


컬럼명 ID A B
실행전 실행후  
데이터 M1 130000 140000 3
M2 E090000 E100000 3
M3 QWEWU270000 QWEWU280000 3
M4 234567 244567 3
M5 W123456 W133456 3
M6 ERTY000000 ERTY010000 3
M7 000000 000000 4
: : : :

 

A컬럼에는 영문대문자0~5자리+숫자6자리
레코드는 100개정도.
<질문>
B컬럼이 3일때
A컬럼의 숫자앞에서 두자리에 1을 더하는 쿼리좀 부탁합니다.

날씨는 시원한데 제 머리는 끈적거리내요...ㅠㅠ

 

by 도미노 같은 놈 [2016.10.05 15:38:33]
WITH T AS
(SELECT 'M1' ID, '130000' A, 3 B FROM DUAL UNION ALL
 SELECT 'M2', 'E090000', 3 FROM DUAL UNION ALL
 SELECT 'M3', 'QWEWU270000', 3 FROM DUAL UNION ALL
 SELECT 'M4', '234567', 3 FROM DUAL UNION ALL
 SELECT 'M5', 'W123456', 3 FROM DUAL UNION ALL
 SELECT 'M6', 'E000000', 3 FROM DUAL UNION ALL
 SELECT 'M7', '000000', 4 FROM DUAL)
SELECT ID,CASE WHEN B=3 THEN substr(a, 1, regexp_instr(a,'[[:digit:]]')-1)|| to_char(substr(a, nvl(LENGTH(REGEXP_REPLACE(A,'[[:digit:]]')), 0)+1) + 10000,'fm000000')
			ELSE A END A,
		 B
		FROM T;

 

이런 식이면 되지 않을까요?? 막 짜서 지저분하긴 하네요;;


by BadGod [2016.10.05 15:55:29]

도미노 같은 놈 님

감사합니다.


by 마농 [2016.10.05 15:39:38]
WITH t AS
(
SELECT 'M1' id, '130000' a, 3 b FROM dual
UNION ALL SELECT 'M2', 'E090000'   , 3 FROM dual
UNION ALL SELECT 'M3', 'WU270000'  , 3 FROM dual
UNION ALL SELECT 'M4', '234567'    , 3 FROM dual
UNION ALL SELECT 'M5', 'W123456'   , 3 FROM dual
UNION ALL SELECT 'M6', 'ERTY000000', 3 FROM dual
UNION ALL SELECT 'M7', '000000'    , 4 FROM dual
)
SELECT id, a, b
     , DECODE(b, 3
       , SUBSTR(a, 1, LENGTH(a) - 6) || LPAD(SUBSTR(a, -6) + 10000, 6, '0')
       , a) AS a_new
  FROM t
;

 


by BadGod [2016.10.05 15:56:18]

마농님,

감사합니다.

항상 많은 도움주셔서 커피라도 대접해드려야 겠네요.. 감솨 감솨^^

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