Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the ultimate-member domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /ledcorps/www/wp/wp-includes/functions.php on line 6114 [SQL] Oracle 구분자 행, 열, 분리, 자르기(REGEXP_SUBSTR, REGEXP_COUNT) – 대나무숲

[SQL] Oracle 구분자 행, 열, 분리, 자르기(REGEXP_SUBSTR, REGEXP_COUNT)

출처: [SQL] Oracle 구분자 행, 열, 분리, 자르기(REGEXP_SUBSTR, REGEXP_COUNT)

보통 타 시스템과 연계해서 데이터를 받으면 파이프 라인(|), 콤마(,) 등등 특수 문자를 활용해서 받게 되는 경우가 많을 것입니다. 그럴 때 각 항목을 파싱 하고, 적절한 패턴으로 조회하는 방법을 해보겠습니다.

구분자는 파이프 라인(|)을 기준으로 설명 할 예정이며, 아래 쿼리에서 적절하게 변경하면 다른 특수 문자도 충분히 가능합니다.

1. 데이터 정보

IN_DATA 
  - TYPE  : VARCHAR2
  - VALUE : '|A||C| DEF |      G|||'

2. 파이프 라인으로 구분된 문자열 행(Column) 처리

/*
  - REPLACE 함수를 이용해서 '|' 부분자가 겹쳐 있는 항목을 띄워 놓기 위해서 '| ' 명시적으로 한 칸 띄웠습니다.
  - REGEXP_SUBSTR 정규 표현식 함수를 활용하면 행(Column)으로 나열 할 수 있습니다.
  - TRIM 함수를 이용해서 ' '빈 칸을 제거 합니다.
*/
SELECT    A.TEXT_DATA
         ,TRIM(REGEXP_SUBSTR(REPLACE(TEXT_DATA, '|', '| '), '[^|]+', 1, 1, 'i')) AS DATA_01
         ,TRIM(REGEXP_SUBSTR(REPLACE(TEXT_DATA, '|', '| '), '[^|]+', 1, 2, 'i')) AS DATA_02
         ,TRIM(REGEXP_SUBSTR(REPLACE(TEXT_DATA, '|', '| '), '[^|]+', 1, 3, 'i')) AS DATA_03
         ,TRIM(REGEXP_SUBSTR(REPLACE(TEXT_DATA, '|', '| '), '[^|]+', 1, 4, 'i')) AS DATA_04
         ,TRIM(REGEXP_SUBSTR(REPLACE(TEXT_DATA, '|', '| '), '[^|]+', 1, 5, 'i')) AS DATA_05
         ,TRIM(REGEXP_SUBSTR(REPLACE(TEXT_DATA, '|', '| '), '[^|]+', 1, 6, 'i')) AS DATA_06
         ,TRIM(REGEXP_SUBSTR(REPLACE(TEXT_DATA, '|', '| '), '[^|]+', 1, 7, 'i')) AS DATA_07
         ,TRIM(REGEXP_SUBSTR(REPLACE(TEXT_DATA, '|', '| '), '[^|]+', 1, 8, 'i')) AS DATA_08
FROM      (SELECT    :IN_DATA AS TEXT_DATA, REGEXP_COUNT(:IN_DATA, '\|') AS C1_1
           FROM      DUAL) A
;

3. 파이프 라인으로 구분된 문자열 열(ROW)로 처리

/*
  - REPLACE 함수를 이용해서 '|' 부분자가 겹쳐 있는 항목을 띄워놓기 위해서 '| ' 명시적으로 한칸 띄웠습니다.
  - REGEXP_SUBSTR 정규 표현식 함수를 활용하면 열(ROW)로 나열 할 수 있습니다.
  - TRIM 함수를 이용해서 ' '빈 칸을 제거 합니다.
  - REGEXP_COUNT 정규표현식 함수를 사용해서 '|' 구분자의 수를 구합니다.
*/
SELECT    A.TEXT_DATA, A.TEXT_GB_CNT, TRIM(REGEXP_SUBSTR(REPLACE(TEXT_DATA, '|', '| '), '[^|]+', 1, B.NO, 'i')) AS DATA
FROM      (SELECT    :IN_DATA AS TEXT_DATA, REGEXP_COUNT(TO_CHAR(:IN_DATA), '\|') AS TEXT_GB_CNT
           FROM      DUAL) A
         ,COPY_T B
WHERE     B.NO <= A.TEXT_GB_CNT
;

답글 남기기 0

Your email address will not be published. Required fields are marked *