"Zneužití" (jak to řekl Colin 't Hart) connected by
má zde dobrý účel:pomocí REGEXP_SUBSTR
můžete extrahovat pouze jednu ze 4 shod (23,34,45,56):regulární výraz [^,]+
odpovídá libovolné sekvenci znaků v řetězci, která neobsahuje čárku.
Pokud se pokusíte spustit:
SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+') as "token"
FROM DUAL
získáte 23
.
a pokud se pokusíte spustit:
SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,1) as "token"
FROM DUAL
získáte také 23
pouze, že nyní nastavíme také dva další parametry :začněte hledat na pozici 1 (což je výchozí nastavení) a vrátí 1. výskyt.
Nyní spustíme:
SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,2) as "token"
FROM DUAL
tentokrát dostaneme 34
(2. výskyt) a pomocí 3
jako poslední parametr vrátí 45
a tak dále.
Použití rekurzivního connected by
spolu s level
zajišťuje, že obdržíte všechny relevantní výsledky (ne však nutně v původním pořadí!):
SELECT DISTINCT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,LEVEL) as "token"
FROM DUAL
CONNECT BY REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,LEVEL) IS NOT NULL
order by 1
vrátí:
TOKEN
23
34
45
56
který nejenže obsahuje všechny 4 výsledky, ale také je rozděluje do samostatných řádků v sadě výsledků!
Pokud budete hulit s ním – může vám poskytnout jasnější pohled na předmět.