Obsidian/Recognition/Work Related/1.업무메모/2022.02/2022-02-18.md

40 lines
1.5 KiB
Markdown

저장용 데이터 자르기 PL/SQL
WITH TMP AS (SELECT :ar_data AS STR FROM DUAL)
SELECT
REGEXP_SUBSTR(TMP.STR, '[^|]+', 1, LEVEL) CODE
FROM
DUAL, TMP
CONNECT BY REGEXP_SUBSTR(TMP.STR, '[|]+', 1, LEVEL) IS NOT NULL;
-- 데이터 1개
select substr(:ar_data, 1, instr(:ar_data, '|', 1) - 1)
from dual
-- 나머지 데이터
select substr(:ar_data, instr(:ar_data, '|', 1) +1)
from dual
### 행으로 분리
WITH TT AS
(
SELECT 'AAA,BBB,CCC,DDD.EEE' TXT FROM DUAL
)
SELECT TRIM(REGEXP_SUBSTR(TXT, '[^,]+', 1, LEVEL)) AS TXT
FROM TT
CONNECT BY INSTR(TXT, ',', 1, LEVEL - 1) > 0
### 열로 분리
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