특수문자 기준 문자열 자르기 문의 드립니다~

|
http://www.gurubee.net/article/62172

 

 

특수문자 기준 문자열 자르기 문의 드립니다~
 
안녕하세요~ 요즘 날씨가 많이 포근해졌네요~ 즐거운 한주 되세요~


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

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 컬럼명);

두개의 쿼리에 대해 조언 부탁드리겠습니다.....

 

글 등 록 목록보기

댓글 목록
  •  
    마농 (30,074:Lv60) [2014년 03월 25일 23시]

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    -- 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
    ;
And