1. 배경
특정문자로 컬럼들을 합쳐서 하나로 만든 후 다시 컬럼별로 나눌려고 하는데,
INSTR로 분리 할려고 하다가 쓰는 글.
2. 동일내용의 반복. 피라미드 ㅎㅎ. 너무길다.
SELECT a, b, c, d, e, f, g, SUBSTR(col1, 1, INSTR(col1, '#')-1) h, SUBSTR(col1, INSTR(col1, '#')+ 1) col1
FROM (
SELECT a, b, c, d, e, f, SUBSTR(col1, 1, INSTR(col1, '#')-1) g, SUBSTR(col1, INSTR(col1, '#')+ 1) col1
FROM (
SELECT a, b, c, d, e, SUBSTR(col1, 1, INSTR(col1, '#')-1) f, SUBSTR(col1, INSTR(col1, '#')+ 1) col1
FROM (
SELECT a, b, c, d, SUBSTR(col1, 1, INSTR(col1, '#')-1) e, SUBSTR(col1, INSTR(col1, '#')+ 1) col1
FROM (
SELECT a, b, c, SUBSTR(col1, 1, INSTR(col1, '#')-1) d, SUBSTR(col1, INSTR(col1, '#')+ 1) col1
FROM (
SELECT a, b, SUBSTR(col1, 1, INSTR(col1, '#')-1) c, SUBSTR(col1, INSTR(col1, '#')+ 1) col1
FROM (
SELECT a, SUBSTR(col1, 1, INSTR(col1, '#')-1) b, SUBSTR(col1, INSTR(col1, '#')+ 1) col1
FROM (
SELECT SUBSTR(col1, 1, INSTR(col1, '#')-1) a, SUBSTR(col1, INSTR(col1, '#')+ 1) col1
FROM (
SELECT 'abc#123#def#45#gH#678#IJK#90#LMN' AS col1
FROM dual
)
)
)
)
)
)
)
)
;
3. 특정문자가 나오는 순서를 사용. 괜찮네.
SELECT col1, SUBSTR(col1, 1, INSTR(col1, '#')-1) a
, SUBSTR(SUBSTR(col1, INSTR(col1, '#', 1, 1) + 1), 1, INSTR(SUBSTR(col1, INSTR(col1, '#', 1, 1) + 1), '#')-1) b
, SUBSTR(SUBSTR(col1, INSTR(col1, '#', 1, 2) + 1), 1, INSTR(SUBSTR(col1, INSTR(col1, '#', 1, 2) + 1), '#')-1) c
, SUBSTR(SUBSTR(col1, INSTR(col1, '#', 1, 3) + 1), 1, INSTR(SUBSTR(col1, INSTR(col1, '#', 1, 3) + 1), '#')-1) d
, SUBSTR(SUBSTR(col1, INSTR(col1, '#', 1, 4) + 1), 1, INSTR(SUBSTR(col1, INSTR(col1, '#', 1, 4) + 1), '#')-1) e
, SUBSTR(SUBSTR(col1, INSTR(col1, '#', 1, 5) + 1), 1, INSTR(SUBSTR(col1, INSTR(col1, '#', 1, 5) + 1), '#')-1) f
, SUBSTR(SUBSTR(col1, INSTR(col1, '#', 1, 6) + 1), 1, INSTR(SUBSTR(col1, INSTR(col1, '#', 1, 6) + 1), '#')-1) g
, SUBSTR(SUBSTR(col1, INSTR(col1, '#', 1, 7) + 1), 1, INSTR(SUBSTR(col1, INSTR(col1, '#', 1, 7) + 1), '#')-1) h
, SUBSTR(col1, INSTR(col1, '#', 1, 8) + 1) i
--, LENGTH(col1)
FROM (
SELECT 'abc#123#def#45#gH#678#IJK#90#LMN' AS col1
FROM dual
)
;
4. INSTR은 무슨. REGEXP_SUBSTR 이게 제일 좋아.
SELECT
REGEXP_SUBSTR(col1, '[^#]+', 1, 1) a
, REGEXP_SUBSTR(col1, '[^#]+', 1, 2) b
, REGEXP_SUBSTR(col1, '[^#]+', 1, 3) c
, REGEXP_SUBSTR(col1, '[^#]+', 1, 4) d
, REGEXP_SUBSTR(col1, '[^#]+', 1, 5) e
, REGEXP_SUBSTR(col1, '[^#]+', 1, 6) f
, REGEXP_SUBSTR(col1, '[^#]+', 1, 7) g
, REGEXP_SUBSTR(col1, '[^#]+', 1, 8) h
, REGEXP_SUBSTR(col1, '[^#]+', 1, 9) i
FROM (
SELECT 'abc#123#def#45#gH#678#IJK#90#LMN' AS col1
FROM dual
)
;
5. 결국은 리소스 많이 잡아서 사용 안함.
그래서 성능은 REGEXP_SUBSTR 이게 최고!
끝.