반응형
오라클에서 위의 내용 처럼 한 컬럼에 특정 구분자(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
위의 쿼리는 첫 번째 쿼리 보다 간결하지만, 성능상의 이슈가 있어 첫 번째 쿼리로 진행 함.
반응형
'DB > Oracle' 카테고리의 다른 글
ORA-12519 TNS:no appropriate handler found (1) | 2021.03.08 |
---|---|
ORA-12953 (0) | 2020.06.10 |
CONNECT BY 뎁스구조 쿼리 (0) | 2020.02.14 |
Like검색할때 Text Index 생성시 유의사항 (0) | 2020.01.29 |
여러 행의 데이터를 하나의 컬럼데이터로 표현(LISTAGG,XMLAGG) (0) | 2020.01.29 |