본문 바로가기

SQL2

Oracle SQL LISTAGG 함수로 행(row) 합치기 Oracle SQL을 작성하다 보면 특정 컬럼의 데이터 row를 1개의 문자열로 합쳐야 하는 경우가 존재한다. 그럴 경우 아래와 같이 ORACLE LISTAGG 함수를 이용해서 행을 합칠 수 있다. 만약 10, 20, 30 데이터 row로 이루어진 테이블이 있다고 가정하자(이 글에서는 테이블 대신 WITH 절을 사용할 것이다) WITH TAB AS ( SELECT '10' COL FROM DUAL UNION ALL SELECT '20' COL FROM DUAL UNION ALL SELECT '30' COL FROM DUAL) SELECT * FROM TAB; 3개의 ROW를 1개의 STRING으로 묶고 각 데이터 값을 ","로 구분하기 위해서는 아래와 같이 LISTAGG 함수를 사용해서 SQL을 작성하면.. 2021. 5. 28.
Oracle SQL 특정 문자 기준으로 문자열 분리하기(행으로 분리) Oracle SQL을 작성하다 보면 특정 문자를 기준으로 문자열을 행(row)으로 분리해야 하는 경우가 종종 있다. 만약 테이블 컬럼의 데이터가 "10|20|30|40|50|" 인 경우, 문자 "|"를 기준으로 10~50으로 데이터를 분리(5개의 row) 하려면 아래와 같이 SQL을 작성하면 된다(아래 SQL에서는 테이블이 WITH절, 컬럼은 STR이고, 분리된 ROW 명이 CODE 다 ) 문자열 SQL WITH TMP AS (SELECT '10|20|30|40|50|' AS STR FROM DUAL) SELECT REGEXP_SUBSTR(TMP.STR, '[^|]+', 1, LEVEL) CODE FROM DUAL, TMP CONNECT BYREGEXP_SUBSTR(TMP.STR, '[^|]+', 1, .. 2021. 5. 26.