DB/Oracle
Split처럼 특정 구분자를 기준으로 열에서 행으로 변환 (Oracle)
밍꿔
2020. 7. 27. 18:21
반응형
오라클에서 위의 내용 처럼 한 컬럼에 특정 구분자(ex ',' , '/' 등등)로 구분하여 데이터를 관리하는 경우가
종종 있다. (개인적으론 테이블 설계가 잘못 되었다고 생각됨)
아래의 쿼리 형태로 행으로 구분해서 표현 가능 하다.
SELECT
T.ID
,REGEXP_SUBSTR(T.VALUE, '[^,]+', 1, Level) AS VALUE
,T.REG_DATE
FROM (
SELECT 1 AS ID, '테스트1,테스트2,테스트3' AS VALUE, '2020-07-27 13:30:00' AS REG_DATE FROM DUAL
UNION ALL
SELECT 2 AS ID, '테스트4,테스트5' AS VALUE, '2020-07-27 14:40:00' AS REG_DATE FROM DUAL
UNION ALL
SELECT 3 AS ID, '테스트6,테스트7,테스트8,테스트9' AS VALUE, '2020-07-27 15:50:00' AS REG_DATE FROM DUAL
)T
WHERE T.VALUE IS NOT NULL
CONNECT BY LEVEL <= REGEXP_COUNT(T.VALUE, '[^,]+')
AND PRIOR T.ID = T.ID
AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL
변환 후, 아래와 같이 조회 가능.
추가로,
SELECT
REGEXP_SUBSTR('AAA,BBB,CCC,DDD','[^,]+', 1, LEVEL)
FROM DUAL
CONNECT BY REGEXP_SUBSTR('AAA,BBB,CCC,DDD', '[^,]+', 1, LEVEL) IS NOT NULL
위의 쿼리는 첫 번째 쿼리 보다 간결하지만, 성능상의 이슈가 있어 첫 번째 쿼리로 진행 함.
반응형