add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
select * from V$VERSION;
BANNER BANNER_FULL BANNER_LEGACY CON_ID
Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production 0
WITH SAMPLE_T AS (
SELECT 'A,BC,,EF' AS VAL FROM DUAL UNION ALL
SELECT 'A,BC,D,EF' AS VAL FROM DUAL
)
SELECT A.VAL
,REGEXP_SUBSTR(A.VAL,'[^,]+',1,1) AS COL1
,REGEXP_SUBSTR(A.VAL,'[^,]+',1,2) AS COL2
,REGEXP_SUBSTR(A.VAL,'[^,]+',1,3) AS COL3
,REGEXP_SUBSTR(A.VAL,'[^,]+',1,4) AS COL4
FROM SAMPLE_T A;
VAL COL1 COL2 COL3 COL4
A,BC,,EF A BC EF null
A,BC,D,EF A BC D EF
WITH SAMPLE_T AS (
SELECT 'A,BC,,EF' AS VAL FROM DUAL UNION ALL
SELECT 'A,BC,D,EF' AS VAL FROM DUAL
)
SELECT A.VAL
,TRIM(REGEXP_SUBSTR(REPLACE(A.VAL,',',', '),'[^,]+',1,1)) AS COL1
,TRIM(REGEXP_SUBSTR(REPLACE(A.VAL,',',', '),'[^,]+',1,2)) AS COL2
,TRIM(REGEXP_SUBSTR(REPLACE(A.VAL,',',', '),'[^,]+',1,3)) AS COL3
,TRIM(REGEXP_SUBSTR(REPLACE(A.VAL,',',', '),'[^,]+',1,4)) AS COL4
FROM SAMPLE_T A;
VAL COL1 COL2 COL3 COL4
A,BC,,EF A BC null EF
A,BC,D,EF A BC D EF
WITH SAMPLE_T AS (
SELECT 'A,BC,,EF' AS VAL FROM DUAL UNION ALL
SELECT 'A,BC,D,EF' AS VAL FROM DUAL
)
SELECT A.VAL
,REGEXP_SUBSTR(A.VAL,'[^,]',1,1) AS COL1
,REGEXP_SUBSTR(A.VAL,'[^,]+',1,2) AS COL2
,REGEXP_SUBSTR(A.VAL,'(.*?)(,|$)',1,3,null,1) AS COL3
,REGEXP_SUBSTR(A.VAL,'(.*?)(,|$)',1,4,null,1) AS COL4
FROM SAMPLE_T A;
VAL COL1 COL2 COL3 COL4
A,BC,,EF A BC null EF
A,BC,D,EF A BC D EF
WITH SAMPLE_T AS (
SELECT 'A,BC' AS VAL FROM DUAL UNION ALL
SELECT 'D,E,F' AS VAL FROM DUAL
)
SELECT A.VAL
,REGEXP_SUBSTR(A.VAL,'[^,]+',1, B.LNO) AS COL1
FROM (SELECT VAL, REGEXP_COUNT(VAL,'[^,]+') AS STR_COUNT
FROM SAMPLE_T) A
,(SELECT LEVEL LNO
FROM DUAL
CONNECT BY LEVEL <= 10 /* REGEXP_COUNT 값의 최대값을 주면 되나, 큰 값을 주면 됨. */
) B
WHERE A.STR_COUNT >= B.LNO
VAL COL1
A,BC A
D,E,F D
A,BC BC
D,E,F E
D,E,F F
WITH SAMPLE_T AS (
SELECT 1 AS NO, 'A,BC' AS VAL FROM DUAL UNION ALL
SELECT 2 AS NO, 'D,E,F' AS VAL FROM DUAL
)
SELECT A.VAL
,REGEXP_SUBSTR(A.VAL,'[^,]+',1, LNO) AS COL1
FROM SAMPLE_T A
,LATERAL(SELECT LEVEL LNO
FROM DUAL
CONNECT BY LEVEL <= REGEXP_COUNT(A.VAL,'[^,]+'))
VAL COL1
A,BC A
A,BC BC
D,E,F D
D,E,F E
D,E,F F
WITH SAMPLE_T AS (
SELECT ','||'A,BC,,EF'||',' AS VAL FROM DUAL
)
SELECT A.VAL, LEVEL LNO
,SUBSTR(A.VAL,INSTR(VAL,',',1,LEVEL)+1, INSTR(VAL,',',1,LEVEL+1)-INSTR(VAL,',',1,LEVEL)-1) AS COL1
FROM SAMPLE_T A
CONNECT BY LEVEL <= 4
VAL LNO COL1
,A,BC,,EF, 1 A
,A,BC,,EF, 2 BC
,A,BC,,EF, 3 null
,A,BC,,EF, 4 EF
WITH SAMPLE_T AS (
SELECT ','||'A,,EF'||',' AS VAL FROM DUAL UNION ALL
SELECT ','||'D,G'||',' AS VAL FROM DUAL
)
SELECT A.VAL, LNO,
SUBSTR(VAL,INSTR(VAL,',',1,LNO)+1, INSTR(VAL,',',1,LNO+1)-INSTR(VAL,',',1,LNO)-1) AS COL1
FROM SAMPLE_T A
,LATERAL(SELECT LEVEL LNO
FROM DUAL
CONNECT BY LEVEL <= (LENGTH(A.VAL)-LENGTH(REPLACE(A.VAL,','))-1)
)
VAL LNO COL1
,A,,EF, 1 A
,A,,EF, 2 null
,A,,EF, 3 EF
,D,G, 1 D
,D,G, 2 G