Rozdzielenie stringa po separatorze

0

Witam,

Możecie pomóc?
Nie mogę poradzić sobie z napisaniem zapytania w PL/SQL, dla takiej tabeli:

ID RECORD
1 NAME=TOM,NUMBER=235235,CITY=NEW YORK, AGE=23

Tak, aby w wyniku uzyskać kolumny ID,NAME,NUMBER,CITY,AGE i odpowiednie wartości.
Nie mogę przy użyciu znanych mi funkcji na ciągu znaków rozdzielić tego stringa..
Będę bardzo wdzięczny za pomoc.

P.S
Przy użyciu funkcji "Replace" udało mi się wyczyścić stringa do postaci

ID RECORD
1 TOM,235235,NEW YORK,23

Ale wciąż nie mogę poradzić sobie jak wartości oddzielone przecinkami pokazywać w oddzielnych kolumnach..

Pozdrawiam

0

Nie znam się na pl/sql ale poczytaj o funkcji INSTR

0

Dzięki za trop, zaraz się z nią zapoznam. Wydaję mi się że dzis chyba przerobiłem wszystkie funkcje Oraclowe... i żadna nie pasuje, nie mam zupełnie doświadczenia w zabawie z ciągami znaków.

1

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1