jeśli kolumny są zawsze w tej samej kolejności i zawsze są wszystkie
SELECT
REPLACE(Trim(regexp_substr(rec,'[^,]+',1,1)), 'NAME=', ''),
REPLACE(Trim(regexp_substr(rec,'[^,]+',1,2)), 'NUMBER=', ''),
REPLACE(Trim(regexp_substr(rec,'[^,]+',1,3)), 'CITY=', ''),
REPLACE(Trim(regexp_substr(rec,'[^,]+',1,4)), 'AGE=', '')
FROM
test
natomiast gdy kolumny są w różnych miejscach lub ich ilość jest różna w poszczególnych rekordach to trzeba rzeźbić np. coś takiego
SELECT
id,
REPLACE(Max(CASE WHEN InStr(col1, 'NAME=') > 0 THEN col1 WHEN InStr(col2, 'NAME=') > 0 THEN col2 WHEN InStr(col3, 'NAME=') > 0 THEN col3 WHEN InStr(col4, 'NAME=') > 0 THEN col4 ELSE '' END), 'NAME=', '') name,
REPLACE(Max(CASE WHEN InStr(col1, 'NUMBER=') > 0 THEN col1 WHEN InStr(col2, 'NUMBER=') > 0 THEN col2 WHEN InStr(col3, 'NUMBER=') > 0 THEN col3 WHEN InStr(col4, 'NUMBER=') > 0 THEN col4 ELSE '' END), 'NUMBER=', '') NUMBER_,
REPLACE(Max(CASE WHEN InStr(col1, 'CITY=') > 0 THEN col1 WHEN InStr(col2, 'CITY=') > 0 THEN col2 WHEN InStr(col3, 'CITY=') > 0 THEN col3 WHEN InStr(col4, 'CITY=') > 0 THEN col4 ELSE '' END), 'CITY=', '') CITY,
REPLACE(Max(CASE WHEN InStr(col1, 'AGE=') > 0 THEN col1 WHEN InStr(col2, 'AGE=') > 0 THEN col2 WHEN InStr(col3, 'AGE=') > 0 THEN col3 WHEN InStr(col4, 'AGE=') > 0 THEN col4 ELSE '' END), 'AGE=', '') AGE
FROM
(SELECT
id,
Trim(regexp_substr(rec,'[^,]+',1,1)) col1,
Trim(regexp_substr(rec,'[^,]+',1,2)) col2,
Trim(regexp_substr(rec,'[^,]+',1,3)) col3,
Trim(regexp_substr(rec,'[^,]+',1,4)) col4
FROM
test)
GROUP BY
id