특수문자 기준 문자열 자르기 문의 드립니다~ 0 2 4,052

by 오라클왕따 [Oracle 기초] [2014.03.25 23:01:12]


안녕하세요~ 요즘 날씨가 많이 포근해졌네요~ 즐거운 한주 되세요~


문자열 ';' 기준으로 아래 값들을

HT1816112121400121;로스엔젤레스;부산광역시 강서구 대저1동 4302-22
HT7014021412091123;대한민국;부산광역시 강서구 대저1동 4302-22
HT1611221911240214;오스트레일리아;부산광역시 강서구 대저1동 4302-22

A컬럼에 HT1816112121400121
B컬럼에 로스엔젤레스
C컬럼에 부산광역시 강서구 대저1동 4302-22

A,B,C 컬럼에 나누어 넣으려고 합니다...

SELECT BIGO, SUBSTR(BIGO,1,INSTR(컬럼,';')-1) A, REVERSE(SUBSTR(REVERSE(BIGO), 19, INSTR(REVERSE(BIGO), ';') -1)) B, REVERSE(SUBSTR(REVERSE(BIGO), 1, INSTR(REVERSE(BIGO), ';') - 1)) C
FROM 테이블명 WHERE  BIGO LIKE '%;%'; 이렇게 했더니...

B에 들어가는 값들이 '로스엔젤레스;부산광역시' 또는 '대한민국;부산광역시 강서구'  이런식으로 들어가는데요...
B컬럼 구문 어느곳이 틀린건지 문의 드립니다...


그리고 가운데 '로스엔젤레스, 대한민국, 오스트레일리아' 만 가져오려고 구문을 짜봤는데 
'로스엔젤레스;부산광역시' 이렇게 나옵니다...
SELECT BIGO
, REGEXP_REPLACE(SUBSTR(BIGO, INSTR(BIGO, ';', 1) +1), '\(;*\)') T
FROM (SELECT BIGO FROM 컬럼명);

두개의 쿼리에 대해 조언 부탁드리겠습니다.....
by 마농 [2014.03.25 23:56:47]
-- 1. 어차피 a 는 고정 자리수일텐데 Instr 은 뭐하러 하나요?
-- 2. Why Reverse? 
-- 3. 정규식 패턴 사용이 적절하지 않고요...
WITH t AS
(
SELECT 'HT1816112121400121;로스엔젤레스;부산광역시 강서구 대저1동 4302-22' bigo FROM dual
UNION ALL SELECT 'HT7014021412091123;대한민국;부산광역시 강서구 대저1동 4302-22' FROM dual
UNION ALL SELECT 'HT1611221911240214;오스트레일리아;부산광역시 강서구 대저1동 4302-22' FROM dual
)
SELECT bigo
     -- 1. a 가 자리수 고정인 경우
     , SUBSTR(bigo, 1, 18) a1
     , SUBSTR(bigo, 20, INSTR(bigo, ';', 1, 2)-20) b1
     , SUBSTR(bigo, INSTR(bigo, ';', 1, 2)+1) c1
     -- 2. 자리수와 상관 없이
     , SUBSTR(bigo, 1, INSTR(bigo, ';')-1) a2
     , SUBSTR(bigo, INSTR(bigo, ';')+1, INSTR(bigo, ';', -1)-INSTR(bigo, ';')-1) b2
     , SUBSTR(bigo, INSTR(bigo, ';', -1)+1) c2
     -- 3. 정규식 이용
     , REGEXP_SUBSTR(bigo, '[^;]+', 1, 1) a3
     , REGEXP_SUBSTR(bigo, '[^;]+', 1, 2) b3
     , REGEXP_SUBSTR(bigo, '[^;]+', 1, 3) c3
  FROM t
;

by 오라클왕따 [2014.03.26 11:13:39]
마농님 감사합니다~ 어설프게 공부해서 하려니까 틀린부분도 못잡네요...;;

조언해주신 내용 잘 참고하겠습니다^^

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